簡體   English   中英

select from table where col_a in() ONLY where col_b value match

[英]select from table where col_a in() ONLY where col_b value matches

我正在嘗試構建一個查詢,該查詢基於列 a (parameter_id) 獲取某些行,但當獲取的結果具有匹配的列 b (dimension_id) 時

這是一張代表我正在使用的表格的表格。

parameter_dimension
+-------+---------------+----------------+
| id    | parameter_id  | dimension_id   |
+-------+---------------+----------------+
| 500   | 1             | 100            |
| 501   | 1             | 101            |
| 502   | 1             | 102            |
| 503   | 2             | 102            |
+-------+---------------+----------------+

如果我寫

SELECT *
FROM parameter_dimension
WHERE parameter_id IN (1)
GROUP BY dimension_id

我如願以償

+-------+---------------+----------------+
| id    | parameter_id  | dimension_id   |
+-------+---------------+----------------+
| 500   | 1             | 100            |
| 501   | 1             | 101            |
| 502   | 1             | 102            |
+-------+---------------+----------------+

但是如果我寫

SELECT *
FROM parameter_dimension
WHERE parameter_id IN (1,2)
GROUP BY dimension_id

然后我只希望獲得具有共同維度ID 的行。 像這樣

+-------+---------------+----------------+
| id    | parameter_id  | dimension_id   |
+-------+---------------+----------------+
| 502   | 1             | 102            |
+-------+---------------+----------------+

是否有可能實現這一目標,並且只需要一個查詢?

我更喜歡使用IN()因為parameter_id的數量可能會有所不同。

我已經搜索了很遠的地方,要么留下了我無法破譯的解釋,要么經常懷疑所問的問題與我的有關。

您可以使用具有不同值的 group_concat。 您應該按 parameter_id 訂購

 SELECT *
    FROM parameter_dimension
    WHERE parameter_id IN (1,2)
    GROUP BY dimension_id
    having group_concat(distinct parameter_id ORDER BY parameter_id ASC)='1,2'
    order by parameter_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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