我使用UNION从2个表中获取数据。表1包含3条记录,表2包含1条记录。 我的查询是这样的
SELECT T1.Col1 as Country,T1.Col2 as Airline FROM TABLE1 T1
UNION
SELECT T2.Col1 as Country,T2.Col2 as Airline FROM TABLE2 T2;
因此,我得到以下结果
Country | Airline
--------------------
Thailand | Thai Airways
England | British Airways
USA | US Airlines
USA | Cathay Pacific
在这里,从UNION的第一部分开始,我获得了前3条记录(泰国,英国和美国航空公司)。
从UNION的第二部分我得到了国泰。
但我真正想要的是,如果Table2包含USA的值,那么我想从Table2获取值,否则从Table1获取值。因此,我想要以下类型的结果。
Country | Airline
--------------------
Thailand | Thai Airways
England | British Airways
USA | Cathay Pacific
我已经尝试在mysql中使用CASE语句。但是我无法正确查询。任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用union all
和not exists
:
SELECT T1.Col1 as Country, T1.Col2 as Airline FROM TABLE1 T1
UNION ALL
SELECT T2.Col1 as Country, T2.Col2 as Airline
FROM TABLE2 T2
WHERE NOT EXISTS (SELECT 1 FROM table1 t1 WHERE t1.col1 = t2.col1);
虽然不考虑如此少的记录,但此查询针对索引为TABLE1(col1, col2)
的较大表进行了优化。
答案 1 :(得分:0)
尝试使用此SQL查询。如果表T2中存在来自table1的国家/地区,则它将不包含在结果集中。
SELECT T1.Col1 AS country, T1.Col2 AS airline FROM Table1 T1
WHERE T1.Col1 NOT IN(
SELECT T2.Col1 FROM Table2 T2)
UNION ALL
SELECT T2.Col1 AS country, T2.Col2 AS airline FROM Table2 T2