2016-11-16 60 views
1

我需要显示不匹配where子句的记录。显示记录不匹配在哪里条款

实施例 - select * from citytable where city in ('aa','bb','cc', 'dd','ee');

aabbcc存在于表格中,dd & ee不存在于表格中。不过,我仍然需要显示dd & ee

回答

0

您可能正在寻找这样的事情。 IN条件与包含IN列表中唯一(不同)值的表的内部连接相同。你想要的是一个外连接。您需要有一个表格而不是IN列表。在下面的解决方案中,我将展示如何在运行中创建此“帮助程序”表;还有其他几种方法,这只是表明了这个想法。

select deptno, ename from emp where deptno in (10, 50, 80); 

DEPTNO ENAME 
------ ------ 
10  CLARK 
10  KING 
10  MILLER 


with h (deptno) as (
    select 10 from dual union all 
    select 50 from dual union all 
    select 80 from dual 
) 
select h.deptno, e.ename 
from h left outer join emp e 
on h.deptno = e.deptno 
; 

DEPTNO ENAME 
------ ------ 
10  CLARK 
10  KING 
10  MILLER 
50 
80 
0

我不确定你想要输出的样子。如果没有城市='ee'的数据,你想要展示什么?像这样?

SELECT * FROM 
(SELECT key AS A_key, one AS A_one, two AS A_two FROM cityTable WHERE one='aa') AS A 
JOIN 
(SELECT key AS E_key, one AS E_one, two AS E_two FROM cityTable WHERE one='ee') AS E 
ON A_key=E_key 
...etc. 

编辑:也许这是它:

+0

以下应该清楚--- ************************************ ********* CityTable \t \t 市\t国家 AA \t AA BB \t BB CC \t CC ******************* ************************** \t 我的查询 - select * from citytable where('aa','bb','cc' ,'dd','ee'); \t ********************************************* \t 输出须─\t 市\t DD \t EE \t ************************************* ******** – Kalz

+0

道歉的错字.....我的输出应该是没有返回任何记录在哪里的条款.......这是dd&ee只有 – Kalz

+0

'SELECT city FROM (SELECT city,count(*)AS c FROM cityTable GROUP BY city)WHERE c = 0'? –

0

当我明白你说的'dd' AMD 'ee'不存在于表,但你仍然需要它,就可以使用union all实现它。但请记住,“DD”和“EE”行的列将始终为空,因为没有存在的记录在你的citytable

SELECT ct.col1 AS city, ct.col2.....<all columns of your table> 
    from citytable ct 
    where city in ('aa','bb','cc') 
    UNION ALL 
    select 'dd' as city,null ,null.....<nulls as many times as the number of columns of your table> 
    from citytable ct1 
    UNION ALL 
    select 'ee' as city,null ,null.....<nulls as many times as the number of columns of your table> 
    from citytable ct2