[英]How to use 'IN' statement in mySQL cascaded SELECT statement?
我有兩個表 A 和 B。我需要使用 GROUP_CONCAT 在組合語句中從它們中提取數據。 目前,它不像我預期的那樣工作。 所以我把語句分成兩個單獨的簡單語句來測試。
我就是這樣做的。
Tabel A
FIELD1 FIELD
1 A
2 B
3 C
Table B
FIELD1 FIELD2
1 1,2
2 1
3 2,3
我可以按如下方式閱讀表 B
SELECT B.FIELD2 FROM B WHERE FIELD1=3
輸出是
FIELD2
2,3
現在,如果我按如下方式閱讀表 A
SELECT GROUP_CONCAT(A.FIELD2) FROM A WHERE FIELD1 IN (2,3)
我得到
FIELD2
B,C
現在我想使用以下語句獲得相同的輸出,但它失敗了。
SELECT GROUP_CONCAT(A.FIELD2) FROM A WHERE FIELD1 IN (SELECT B.FIELD2 FROM B WHERE FIELD1=3)
任何幫助修復聲明?
這有點難以解釋。 IN 運算符不會查看列中的 CSV 字符串,而是將其視為要查看的逗號分隔值列表。 如果列值是一些 CSV 數據,則 in 運算符將在其他一些值列表中查找確切的字符串、逗號和所有內容
2 IN (1,2) --true
'2' IN ('1','2') --true
'2' IN ('1,2') --false
'1,2' IN ('1,2') --true
永遠記住,您的 SQL 是像任何其他程序一樣編譯的。 您寫入語句的數據成為程序的一部分。 表中的數據不會成為程序的一部分。 這就是為什么您不能在表格行中找到的一些以逗號分隔的內容列表上使用 IN
就目前而言,您必須將“2,3”拆分為兩行“2”和“3”,或者將其保留為字符串並使用類似
SELECT GROUP_CONCAT(A.FIELD2)
FROM A
INNER JOIN B
ON CONCAT(',', B.FIELD2, ',') LIKE CONCAT('%,', A.FIELD1, ',%')
WHERE B.FIELD1=3
可惡的! :)
您可以使用IN
運算符來完成它,因為B.FIELD2
不是值列表(這是IN
期望的)而是一個字符串。
您必須加入表並使用FIND_IN_SET()
:
SELECT GROUP_CONCAT(A.FIELD2) FIELD2
FROM A INNER JOIN B
ON FIND_IN_SET(A.FIELD1, B.FIELD2)
WHERE B.FIELD1 = 3;
請參閱演示。
結果:
| FIELD2 |
| ------ |
| B,C |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.