我需要显示不匹配where子句的记录。显示记录不匹配在哪里条款
实施例 - select * from citytable where city in ('aa','bb','cc', 'dd','ee');
仅aa
,bb
,cc
存在于表格中,dd
& ee
不存在于表格中。不过,我仍然需要显示dd
& ee
。
我需要显示不匹配where子句的记录。显示记录不匹配在哪里条款
实施例 - select * from citytable where city in ('aa','bb','cc', 'dd','ee');
仅aa
,bb
,cc
存在于表格中,dd
& ee
不存在于表格中。不过,我仍然需要显示dd
& ee
。
您可能正在寻找这样的事情。 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
我不确定你想要输出的样子。如果没有城市='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.
编辑:也许这是它:
当我明白你说的'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
以下应该清楚--- ************************************ ********* 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
道歉的错字.....我的输出应该是没有返回任何记录在哪里的条款.......这是dd&ee只有 – Kalz
'SELECT city FROM (SELECT city,count(*)AS c FROM cityTable GROUP BY city)WHERE c = 0'? –