有两张表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”类型的两个表中的名称相同'.谁能帮我..?
答案 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)