SELECT * from
(SELECT
a.*
b.labelId
FROM
Book a
LEFT JOIN
BranchBook b
ON b.bookId = a.id
WHERE b.labelId= 001 OR b.labelId = 002) ab
group by ab.id
Mysql 陳述句查詢主表鏈接子表,查詢條件為子表的欄位labelId,查詢出同一本書滿足多個labelId標簽id的書(即多個標簽AND連接),回傳主表資料(group by ab.id),這個sql怎么寫?
求大神指點!!!!!!!!!!!!!!!!!!!
uj5u.com熱心網友回復:
group by 就不能 select * 了,這段應該運行不了吧uj5u.com熱心網友回復:

是要像這樣根據表一表二查出表三嗎?(這里查的是LABELID同時滿足2,3的情況)
uj5u.com熱心網友回復:
是的
uj5u.com熱心網友回復:
CREATE TABLE #A(
ID INT
)
CREATE TABLE #B(
BOOKID INT,
LABELID INT
)
INSERT INTO #A VALUES (1),(2),(3)
INSERT INTO #B VALUES (1,1),(1,2),(1,4),(2,2),(2,3),(3,1),(3,2),(3,3)
SELECT * FROM #A
SELECT * FROM #B
SELECT XX.ID FROM (
SELECT A.ID,
COUNT(*) COUNTS FROM #A A,#B B
WHERE A.ID = B.BOOKID AND B.LABELID IN (2,3) GROUP BY A.ID) XX WHERE COUNTS>=2
DROP TABLE #A,#B
思路是查表二里面LABELID=2或3的數量,如果數量大于等于2就查出對應的表一里的資料,不過這樣好像有點麻煩。
uj5u.com熱心網友回復:
select *
from
(SELECT
a.*
GROUP_CONCAT(b.labelId) as ids
FROM
Book a
LEFT JOIN
BranchBook b
ON b.bookId = a.id group by a.id) ct
WHERE FIND_IN_SET(001, ct.ids)
AND FIND_IN_SET(002, ct.ids)
我的思路是用FIND_IN_SET來做,但是這個好像資料量大的話效率會比較低
uj5u.com熱心網友回復:
你的思路很好,很有幫助,謝了
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/244479.html
標籤:疑難問題
上一篇:資料庫表中存在含“?”字符的資料如何查詢并替換成指定字符
下一篇:救救孩子吧
