我想为每列选择一次可用条目。
解决了这个问题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 multiple columns
我想更进一步,在每个子查询上使用相同的 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,并使数据类型适合示例
答案 0 :(得分:1)
更新:嗯,我最初为这个问题编写了一个通用的SQL解决方案,没有意识到MySQL显然不允许它。
因此,如果您可以创建视图,那么这可能是最轻量级的解决方案。 (视图的定义查询与原始解决方案的select
子句中的with
相同。)
或者,您可以创建一个临时表。如果有太多数据,可能需要更多的资源,但是任何人都不太可能限制所需的权限。
对于记录,原始解决方案如下:
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