gpt4 book ai didi

php - 使用 where 语句在多列上选择不同的值

转载 作者:行者123 更新时间:2023-11-29 11:12:01 24 4
gpt4 key购买 nike

我想为每列选择每个可用条目一次。这个问题已经解决了

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 的 Doctrine ,如果这有帮助的话。

提前致谢!

示例:我的表:

  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 显然不允许这样做。

因此,如果您可以创建 View ,那可能是最轻量级的解决方案。 ( View 的定义查询与我原始解决方案的 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

关于php - 使用 where 语句在多列上选择不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40403840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com