[英]How do I pull all rows from a table with one unique field and specific values for another field?
[英]How to select all values of a field that has specific values in another field?
我有一個表,其中的字段“ id_px”可以具有一些重復的值,因為它在字段“ id_category”中具有不同的值,並且我想檢索“ id_px”上具有我所傳遞的確切值的所有值。 例如:
SELECT id_px FROM my_table WHERE id_category = 1 **AND** id_category = 32;
我找到了一種檢索我想要的結果的方法:
SELECT id_px
FROM my_table
GROUP BY id_px
HAVING SUM(id_category NOT IN (1,32)) = 0
AND SUM(id_category = 1) = 1
AND SUM(id_category = 32) = 1
但是我想在HAVING子句中使用它,因為我必須使用一些UNION子句。
希望您能幫助我,在此先感謝。
我建議一些方法:
3- 3rd one :(工作並標記為答案)
SELECT tbl.id_px FROM
(SELECT id_px ,
SUM(id_category NOT IN (1,32)) as b ,
SUM(id_category = 1) as t1 , SUM(id_category = 32) as t2
FROM my_table
GROUP BY id_px) as tbl
WHERE tbl.b = 0 AND tbl.t1 = 1 AND tbl.t2 = 1
4-重建Query-2:
) 4.1重建的第一步:( )
SELECT tbl.id_px FROM
(SELECT id_px , CONCAT('-,' , GROUP_CONCAT(id_category),',') as gr
FROM my_table
GROUP BY id_px
) as tbl
WHERE
INSTR( tbl.gr , ',1,' )>0
AND INSTR( tbl.gr , ',32,' )>0
AND LENGTH(tbl.gr)-LENGTH(REPLACE(REPLACE(tbl.gr,',1,' ,''), ',32,' ,'')) = LENGTH(CONCAT(',1,' , ',32,' ))
WHERE
最后一個條件是從tbl.gr
替換1和32,並比較減小的LENGTH
如果減小的長度等於1和32的字符串),則只有1和32,因此將查詢重寫為此:
) 4.2-新的可能工作的查詢:( )
SELECT tbl.id_px FROM
(SELECT id_px , GROUP_CONCAT(id_category) as gr
FROM my_table
GROUP BY id_px
) as tbl
WHERE
tbl.gr = '1,32' or tbl.gr = '32,1'
沒有任何示例數據似乎沒問題,但是當問題將id_category限制為恰好具有兩個值而沒有其他id_category時,它們並沒有很好的答案。
注:這兩個查詢,選擇id_px
有id_category
1,32,也許許多其他id_category,所以這些都是對這個問題不是可以接受的答案
SELECT a.id_px
FROM my_table as a
LEFT JOIN my_table as b
ON a.id_px = b.id_px
WHERE a.id_category = 1 AND b.id_category = 32
GROUP BY a.id_px
SELECT tbl.id_px FROM
(SELECT id_px , CONCAT('-,' , GROUP_CONCAT(id_category),',') as gr
FROM my_table
GROUP BY id_px
) as tbl
WHERE
INSTR( tbl.gr , ',1,' )>0
AND INSTR( tbl.gr , ',32,' )>0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.