1.情景展示
where限制條件后面如果想要加select語句的話,如何實現?
2.原因分析
通常情況下,where后面跟的是:clomn=值的方式,其實,=號后面也是可以使用查詢語句的,但有使用限制條件,下面會說;
使用in()或者exists()函數,則基本上沒有限制條件。
3.解決方案
方式一:in()
語法結構:
where cloumn in(select clomn from table)
適用數據庫:MySQL和Oracle
查詢示例:
select t.endno from cz_einvoices t where t.ivccode = '123' and t.orgcode in (select orgcode from cz_unitinfo where invoicingpartycode = '456')
更新示例:
UPDATE CZ_EINVOICES SET BEGNO = '111', ENDNO = '333', CURRENTNO = '222' WHERE IVCCODE = '123' AND ORGCODE IN (SELECT ORGCODE FROM CZ_UNITINFO WHERE INVOICINGPARTYCODE = '456')
方式二:exists()
語法結構:
from table t1 where exists(select 1 from table t2 where t2.cloumn1 = t1.cloumn1)
適用數據庫:MySQL和Oracle
查詢示例:
SELECT T.ENDNO FROM CZ_EINVOICES T WHERE T.IVCCODE = '123' AND EXISTS (SELECT 1 FROM CZ_UNITINFO WHERE INVOICINGPARTYCODE = '456' AND ORGCODE=T.ORGCODE)
4.效果展示
兩種方式實現的效果是一致噠。
2021-01-21
方式三:=(select cloumn from table)
語法結構:
where cloumn=(select cloumn from table)
適用數據庫:MySQL和Oracle
來自評論區園友:代碼中透露着殺氣
where條件 =號后面也是可以跟select語句的;
使用條件:
第一,使用()包住;
第二,select的查詢結果集只能為1(只返回一條數據)。
我自己也測試了一下,確實可行:
ORACLE
MYSQL
5.總結
當確定限制條件where后面字段的值具有唯一性的時候,我們可以直接用=(select 1 ...);
當限制條件where后面字段的值可能有多個時,我們可以使用in(select ...)或exists(select ...)來實現;
in 和 exists的區別:
如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應該用in, 反之如果外層的主查詢記錄較少,子查詢中的表大,又有索引時使用exists;
但如果不走索引的話,則它倆的執行效率沒有太大差別。
2021年10月30日15:28:24
其實,要想得到同樣的數據,還有一種實現方式;
雖然,它並不是使用where...select...語句實現的,但是依舊是我們常用的一種關聯查詢方法;
多一種方法,就是多一條思路,增加一種選擇,增長一種見識;
在實際運用過程中,我們應抱着多學、多想的思路去對待自己的成品,有沒有更好的實現方式。。。
內連接:INNER JOIN
適用數據庫:MySQL和Oracle
源自評論區園友:lybingyu