簡體   English   中英

使用where語句在多個列上選擇不重復

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

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