我正在尝试从 SQL Developer 中提取符合两个行条件的数据。两行都有一个唯一值( ID ),表名是 abc.tcd
ID = Type = GL code = amount
1 = Debit = 0701 = 10000
1 = credit = 0601 = 10000
1 = Credit= 0501 = 1000
1 = Debit= 0401 = 1000
2 = Debit = 0701 = 9000
2 = credit = 0801 = 9000
3 = Debit = 0701 = 6000
3 = credit = 0601 = 6000
条件一:
GL code = '0701' having Type = 'Debit'
条件二:
GL code = '0601' having Type = 'Credit'
预期输出:
ID Type GL code amount
1 = Debit = 0701 = 10000
1 = credit = 0601 = 10000
1 = Credit = 0501 = 1000
1 = Debit = 0401 = 1000
3 = Debit = 0701 = 6000
3 = credit = 0601 = 6000
输出应该根据ID
显示所有行
最佳答案
如果我对问题的理解正确,您想要提取所有 某些ID 的行,其中两个不同的行 满足两个不同的条件。您可以使用几个 in
运算符:
SELECT *
FROM mytable
WHERE id IN (SELECT id
FROM my_table
WHERE GLCode = '0701' AND Type = 'Debit')
AND id IN (SELECT id
FROM my_table
WHERE GLCode = '0601' AND Type = 'Credit')
当然,这可以很容易地转换为使用 exists
运算符:
SELECT *
FROM mytable a
WHERE EXISTS (SELECT *
FROM my_table b
WHERE a.id = b.id AND b.GLCode = '0701' AND b.Type = 'Debit')
AND EXISTS (SELECT *
FROM my_table c
WHERE a.id = c.id AND c.GLCode = '0601' AND c.Type = 'Credit')
一种更优雅的方法可能是使用 或
将所有条件包含在一个查询中,并 count
有多少条件被满足:
SELECT *
FROM mytable
WHERE id IN (SELECT id
FROM my_table
WHERE (GLCode = '0701' AND Type = 'Debit') OR
(GLCode = '0601' AND Type = 'Credit')
GROUP BY id
HAVING COUNT(*) = 2)
关于mysql - SQL - 匹配两行的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27792974/