【问题标题】:SQL Query Multiple conditions on a column (On same Table)SQL查询列上的多个条件(在同一个表上)
【发布时间】:2020-09-15 17:07:25
【问题描述】:

我有以下问题,这里是一个更好理解的例子。

假设我有一张这样的表:

我想从 Spec Column 获取具有 Spec 2 且没有 Spec 5 的 Distinct Ids(非 Nulls)。

预期的结果是这样的:

预期结果:

它类似于左连接吗? 不幸的是,我的查询没有得到想要的结果。

【问题讨论】:

  • 你有父表吗?因为这看起来像一个子表(Cam ID 是重复)。如果您有任何父表,则可以从内部联接中提取查询结果

标签: mysql sql join


【解决方案1】:
SELECT Cam_ID 
FROM source_table
WHERE Cam_ID IS NOT NULL -- if Cam_ID cannot be zero then simply 
                         -- WHERE Cam_ID
GROUP BY Cam_ID
HAVING  SUM(Specs = 'Specs 2') -- at least one 'Specs 2'
   AND !SUM(Specs = 'Specs 5') -- and none 'Specs 5'

【讨论】:

    【解决方案2】:

    使用存在与不存在

    select camid from table_name t1
    where not exists ( select 1 from table_name t2 where t1.camid=t2.camid
                       and Specs= 'Spec 5')
     and exists ( select 1 from table_name t2 where t1.camid=t2.camid 
                                       and Specs= 'Spec 2')
    

    【讨论】:

      【解决方案3】:

      试试下面这个脚本-

      SELECT DISTINCT Cam_ID 
      FROM your_table
      WHERE Cam_ID NOT IN
      (
          SELECT DISTINCT Cam_ID 
          FROM your_table
          WHERE Specs = 'Specs 5'
      )
      AND Specs = 'Specs 2'
      AND Cam_ID IS NOT NULL
      

      【讨论】:

        【解决方案4】:

        下面的 SQL 脚本应该会给你所需的输出。

        SELECT CamId FROM (
        SELECT t.CamId,
        STUFF((
        SELECT  ',' + Specs FROM
        (SELECT t1.Specs FROM test_table as t1 
        WHERE t1.CamId = t.CamId) AS T 
        FOR XML PATH('')
        ),1,1,'') AS specs
        FROM test_table AS t
        WHERE CamId IS NOT NULL
        GROUP BY CamId) AS t5
        where t5.specs LIKE '%Specs 2%'
        AND t5.specs NOT LIKE '%Specs 5%'
        

        【讨论】:

          【解决方案5】:
          SELECT Cam_Id 
          FROM table_one t1 
          WHERE
              NOT EXISTS ( SELECT 1 FROM table_one t2 WHERE t1.Cam_Id = t2.Cam_Id AND Specs = 'Spec 5' ) 
              AND EXISTS ( SELECT 1 FROM table_one t2 WHERE t1.Cam_Id = t2.Cam_Id AND Specs = 'Spec 2' ) 
          GROUP BY Cam_Id
          

          【讨论】:

            猜你喜欢
            • 2021-12-13
            • 2023-03-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多