簡體   English   中英

如何選擇另一個字段中具有特定值的字段的所有值?

[英]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_pxid_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM