一个表中的复杂SQL查询

时间:2013-11-21 00:39:45

标签: mysql sql

我有一个表如下,我想要在不同国家/地区拥有相同批号的产品。我需要所有记录。

表:

╔════════════╦════════════╦═════════╗
║ Product ID ║ Lot Number ║ Country ║
╠════════════╬════════════╬═════════╣
║          1 ║ L01        ║ US      ║
║          2 ║ L02        ║ US      ║
║          3 ║ L01        ║ UK      ║
║          4 ║ L02        ║ US      ║
║          5 ║ L03        ║ UK      ║
║          6 ║ L03        ║ US      ║
║          7 ║ L03        ║ US      ║
╚════════════╩════════════╩═════════╝

必需输出:

╔════════════╦════════════╦═════════╗
║ Product ID ║ Lot Number ║ Country ║
╠════════════╬════════════╬═════════╣
║          1 ║ L01        ║ US      ║
║          3 ║ L01        ║ UK      ║
║          5 ║ L03        ║ UK      ║
║          6 ║ L03        ║ US      ║
║          7 ║ L03        ║ US      ║
╚════════════╩════════════╩═════════╝

1 个答案:

答案 0 :(得分:2)

那个是相对简单的:

SELECT *
FROM MyTable t1
WHERE EXISTS (
    SELECT * FROM MyTable t2
    WHERE t1.LotNumber=t2.LotNumber AND t1.Country <> t2.Country
)

这是不言自明的:您希望所有行都至少有一行具有相同的批号,但是不同的国家/地区。请注意,为了在同一个查询中使用相同的表两次在SQL中表达这一点,您需要为表提供一个别名:在上面的查询中,t1t2