SQL查询,检查列A中具有相同值的单元格在列B中是否具有相同的值

时间:2015-12-23 15:23:37

标签: mysql sql

我有一个包含大量列和行的表,如下例所示:

Example table for query

我正在尝试查找部分完成的订单,这样订单中至少有一条Item Line记录的Goods Issue Date 的订单的一个Item Line记录具有Goods Issue Date值。我可以很容易地获得没有发货日期的订单,但我需要知道订单中有一些带有日期的项目行,有些则没有。

查看上面的示例数据,我只能看到订单#1的结果,因为订单2,3和5都已完全完成,订单4尚未启动。

2 个答案:

答案 0 :(得分:1)

SELECT
    *
FROM
    theTable t1
WHERE
    t1.`Goods Issue Date` IS NULL
    AND EXISTS ( SELECT
                    *
                 FROM
                    theTable t2
                 WHERE
                    t2.`Order` = t1.`Order`
                    AND t2.`Goods Issue Date` IS NOT NULL );

DEMO

如果IN不可为空,您也可以使用简单的Order

SELECT  *
FROM    theTable
WHERE   `Goods Issue Date` IS NULL
        AND `Order` IN (
           SELECT  `Order` 
           FROM    theTable 
           WHERE   `Goods Issue Date` IS NOT NULL 
        )

答案 1 :(得分:0)

首先需要识别坏订单。为了便于阅读,我在这里用CTE(公用表表达式)完成了这个操作,但是可以在join语句中使用一个简单的子查询来完成。

完成后,只需将结果重新加入父表即可。

WITH BadOrders AS (
    SELECT *
    FROM   table
    WHERE [Goods Issue Date] IS NULL)
SELECT table.*
FROM   table
       JOIN BadOrders ON table.Order = BadOrders.Order