Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 根据条件从任一表中获取数据_Mysql_Sql_Database - Fatal编程技术网

Mysql 根据条件从任一表中获取数据

Mysql 根据条件从任一表中获取数据,mysql,sql,database,Mysql,Sql,Database,我使用一个并集从两个表中获取数据。表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 | T

我使用一个并集从两个表中获取数据。表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 
在这里,从联盟的第一部分,我得到了前3项记录(泰国、英国和美国航空公司)

从联盟的第二部分我得到了国泰航空

但我真正想要的是,如果表2包含USA的值,那么我想从表2中获取值,否则从表1获取值。因此,我希望得到以下类型的结果

Country  |  Airline
--------------------
 Thailand | Thai Airways
 England  | British Airways
 USA      | Cathay Pacific 

我曾尝试在mysql中使用CASE语句,但我无法正确地进行查询。任何帮助都将不胜感激。

您可以使用
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)
上的较大表进行了优化。您可以使用
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)

上的较大表进行了优化尝试使用此SQL查询。如果表1中的国家/地区存在于表T2中,则不包括在结果集中

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

尝试使用此SQL查询。如果表1中的国家/地区存在于表T2中,则不包括在结果集中

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