使用条件使用连接编写查询

时间:2021-02-19 18:39:33

标签: mysql sql join inner-join

有两张表table1,table2。

表 1:

<头>
数字 type 名称
1100 1 史蒂夫
1100 2 约翰
1100 2 jack

..... 等等不同的数字

类似表2:

<头>
数字 type 名称
1100 1 亚伯拉罕
1100 2 约翰
1100 2 jack

等等不同的数字... 预期输出:基于相同数量和相同类型的连接两个表,但在名称条件下,它应该打印不匹配的地方。例如,在上面的 john 在表 1 中有类型 '2',在表 2 中也有 john 但对于类型 ' 1' 它与史蒂夫 <> abraham 不匹配。我正在执行此查询,但输出也包含带有 jack 和 john 的行:

<头>
数字 type name1 name2
1100 1 史蒂夫 亚伯拉罕
1100 2 约翰 jack
1100 2 jack 约翰

这里表 1 和表 2 中的行数相等,每个表中每种类型的行数也相等

select * from table1,table2 where table1.number=table2.number and table1.type=table2.type and table1.name <> table2.name

预期输出:

<头>
数字 type name1 name2
1100 1 史蒂夫 亚伯拉罕

正如你在上面看到的,我已经给出了我为我的查询得到的输出(它包含 jack,John 对,但我不想要它们,因为两个表中的类型 '2' 名称是相同的)但是如果你看到对于两个表中的类型“1”名称不同,所以我想打印它们。如果两个表的“2”类型名称不同,我也希望它们作为输出,但在示例中,“2”类型的两个表中的名称相同'.谁能帮我..?

1 个答案:

答案 0 :(得分:0)

我认为这会满足您的要求。

SELECT table1.number
    ,table1.type
    ,table1.name
    ,table2.name
FROM table1
    JOIN table2 ON 
        table2.number = table1.number AND
        table2.type = table1.type AND
        table1.name NOT IN (SELECT t2.name 
                              FROM table2 t2 
                              WHERE t2.number = table1.number AND 
                                t2.type = table1.type)