SQL:如何在同一行显示 WHERE IN 和 WHERE NOT IN?

Posted

技术标签:

【中文标题】SQL:如何在同一行显示 WHERE IN 和 WHERE NOT IN?【英文标题】:SQL: How to show the WHERE IN and WHERE NOT IN in the same line? 【发布时间】:2015-05-27 18:08:47 【问题描述】:

各位大师早安。

基本上我想展示 3 张桌子。但我有一些条件:

显示表perangkat,jenis_perangkat,pasang但只显示ID已保存在表sedia上的数据(上面这3个表具有相同的ID名为kd_jp并已保存在sedia) 并且不要显示已保存在 pasang 上的 ID 数据。

运行上面的代码后,出现语法错误。它一直有效:

SELECT  `perangkat`.`kd_jp`,  `perangkat`.`no_seri`,  `perangkat`.`status`,  
        `jenis_perangkat`.`nm_jp`,  `jenis_perangkat`.`merk_jp`
FROM`perangkat`
INNER JOIN `jenis_perangkat` 
ON `jenis_perangkat`.`kd_jp` = `perangkat`.`kd_jp` 
WHERE perangkat.kd_jp IN (select sedia.kd_jp from sedia) 

但是当我添加 NOT IN 时它不起作用:and where perangkat.kd_jp not in (select pasang.kd_jp from pasang);

所以这里是出现语法错误的查询:

SELECT  `perangkat`.`kd_jp`,  `perangkat`.`no_seri`,  `perangkat`.`status`,  
        `jenis_perangkat`.`nm_jp`,  `jenis_perangkat`.`merk_jp`
FROM`perangkat`
INNER JOIN `jenis_perangkat` 
ON `jenis_perangkat`.`kd_jp` = `perangkat`.`kd_jp` 
WHERE perangkat.kd_jp IN (select sedia.kd_jp from sedia) 
  AND where perangkat.kd_jp not in (select pasang.kd_jp from pasang);

【问题讨论】:

一个查询中不能有多个where。您可以在其中有多个条件,但查询中只能存在where 【参考方案1】:

您只能有一个WHERE 子句。将WHERE ... AND WHERE ... 更改为WHERE ... AND ...

SELECT `perangkat`.`kd_jp`, `perangkat`.`no_seri`, `perangkat`.`status`,
  `jenis_perangkat`.`nm_jp`, `jenis_perangkat`.`merk_jp` 
FROM `perangkat`
INNER JOIN `jenis_perangkat`
  ON `jenis_perangkat`.`kd_jp` = `perangkat`.`kd_jp`
WHERE perangkat.kd_jp IN (SELECT sedia.kd_jp FROM sedia)
  AND perangkat.kd_jp NOT IN (SELECT pasang.kd_jp FROM pasang);

【讨论】:

【参考方案2】:

你不能使用以及在哪里

and where perangkat.kd_jp not in (select pasang.kd_jp from pasang);

只需使用

and where perangkat.kd_jp not in (select pasang.kd_jp from pasang);

SQL 语法选择语法是

select * from [table] WHERE ... AND ... AND ... OR ...

所以

SELECT  `perangkat`.`kd_jp`,  `perangkat`.`no_seri`,  `perangkat`.`status`,  `jenis_perangkat`.`nm_jp`,  `jenis_perangkat`.`merk_jp`FROM`perangkat`INNER JOIN `jenis_perangkat` ON `jenis_perangkat`.`kd_jp` = `perangkat`.`kd_jp` where perangkat.kd_jp in (select sedia.kd_jp from sedia) and perangkat.kd_jp not in (select pasang.kd_jp from pasang);

更新

更好的解决方案是使用 EXISTS 而不是 INNOT IN

SELECT a.kd_jp, a.no_seri, a.status, b.nm_jp, b.merk_jp 
FROM perangkat a 
INNER JOIN jenis_perangkat b  ON b.kd_jp = a.kd_jp 
WHERE EXISTS (SELECT c.kd_jp FROM sedia c WHERE c.kd_jp = a.kd_jp) 
AND NOT EXISTS (SELECT c.kd_jp FROM pasang c WHERE c.kd_jp = a.kd_jp);

【讨论】:

以上是关于SQL:如何在同一行显示 WHERE IN 和 WHERE NOT IN?的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一行显示文本和图标

java生成pdf如何让文字和图片显示在同一行

SQL - LEFT JOIN 和 WHERE 语句仅显示第一行

如何使不同的 Django 表单输入按钮显示在同一行

ul标签中嵌套div,div会换行显示,如何让ul和div水平显示在同一行

如何使两个span不在同一行显示、如何使两个DIV在同一行显示、我忘记了、不是float:left;这个