mysql - SQL - 匹配两行的条件

标签 mysql sql select mysqldump

我正在尝试从 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/

相关文章:

sql - 如何使 SQL 语句在变量为空时返回所有行,否则仅返回匹配项

PHP-MySQL 查询优先显示一张表的行

java - IBM Security (Tivoli) Directory Integrator 中的 HTTP 服务器连接器

php - 如何使用 codeigniter 在同一字段中搜索 2 个值?

mysql - 将列添加到现有的唯一键?

SQL:卡片的良好数据库设计?

SQL - 查找年份子集中的所有代码

java - 根据周数从MYSQL中检索数据

java - 带有 Hibernate 的 Jasper - 找不到实体类

MYSQL内存使用