![](/img/trans.png)
[英]Optimizing performance for mysql ORDER BY col_a * col_b without adding col_c=col_a*col_b
[英]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.