[英]Select distinct on multiple columns with where statement
我想為每列選擇一次可用的條目。 這個問題解決了
SELECT DISTINCT a from my_table
UNION
SELECT DISTINCT b from my_table
UNION
SELECT DISTINCT c from my_table
UNION
SELECT DISTINCT d from my_table
在此問題中: MySQL SELECT DISTINCT多列
我想走得更遠,在每個子查詢上使用相同的 WHERE
語句。 有沒有不用每次都定義WHERE
方法嗎? 我當前的查詢如下所示:
SELECT DISTINCT a from my_table WHERE a='a' AND b=1 AND c='.' AND d='ab'
UNION
SELECT DISTINCT b from my_table WHERE a='a' AND b=1 AND c='.' AND d='ab'
UNION
SELECT DISTINCT c from my_table WHERE a='a' AND b=1 AND c='.' AND d='ab'
UNION
SELECT DISTINCT d from my_table WHERE a='a' AND b=1 AND c='.' AND d='ab'
不必給出所有參數,我只想顯示必須達到的最大值。 有什么辦法可以寫得更短嗎?
如果有幫助的話,我會在理論上使用PHP。
提前致謝!
示例:my_table:
a | b | c | d
-----+-----+-----+-----
a | 0 | . | ab
b | 0 | - | ag
a | 1 | . | cfd
c | 1 | . | b
a | 1 | - | ab
c | 1 | - | cfd
應該給出這個結果(沒有where語句):
a | b | c | d
-----+-----+-----+-----
a | 0 | . | ab
b | 1 | - | ag
c | | | cfd
| | | b
並使用WHERE b=0
語句:
a | b | c | d
-----+-----+-----+-----
a | 0 | . | ab
b | | - | ag
編輯:將子查詢更改為UNION,並使數據類型適合該示例
更新:嗯,我最初為這個問題寫了一個通用的SQL解決方案,但沒有意識到MySQL顯然不允許這樣做。
因此,如果您可以創建視圖,那可能是最輕巧的解決方案。 (視圖的定義查詢將與原始解決方案的with
子句中的select
相同。)
或者,您可以創建一個臨時表。 如果有大量數據,則可能會占用更多的資源,但很少有人會限制所需的權限。
記錄下來,原始解決方案如下:
with my_filtered as (
select *
from my_table
where a = 1 and b = 2 -- and ...
)
-- carry on with your query, using my_filtered instead of my_table
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.