Oracle SQL - IN子句显示IN条件中给出的所有记录,即使表中没有数据也是如此

Sri*_*m M 0 sql oracle

我有一张customer如下所述的桌子.

customer_id number customer_name varchar(30) city varchar(20)

列.当以下查询在Oracle db中运行时

SELECT customer_id, city FROM customer WHERE city IN ('abc', 'def', 'ghi')

我得到的输出如下所示.表没有记录ghi

customer_id, city 1, abc 2, def

我正在尝试将输出形成如下.

customer_id, city 1, abc 2, def null, ghi

虽然ghi在表中没有记录,但是要在SELECT查询输出中显示它,其余的列值为null.

非常感谢为这种情况编写SQL的帮助.

sag*_*agi 5

您需要一个包含所有可能性的派生表.要么你有一个,就像城市表,然后你可以做:

SELECT t.customer_id,s.city
FROM city_table s
LEFT JOIN customer t
 ON(s.id = t.city) 
WHERE s.city IN ('abc', 'def', 'ghi')
Run Code Online (Sandbox Code Playgroud)

或者生成你自己的价值观:

SELECT t.customer_id,s.city
FROM (SELECT 'abc' as id FROM DUAL
      UNION ALL 
      SELECT 'def' FROM DUAL
      UNION ALL
      SELECT 'ghi' FROM DUAL) s
LEFT JOIN customer t
 ON(s.id = t.city) 
WHERE s.id IN('abc', 'def', 'ghi')
Run Code Online (Sandbox Code Playgroud)