gpt4 book ai didi

SQL - 根据条件将某些列设置为空

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

假设我有一个名为 people 的表,具有各种属性

  • 名字
  • 姓氏
  • 年龄
  • 电话
  • 电子邮件
  • 地址
  • ...

我想做一个返回所有people的查询,但是,在特定条件下(单独的子查询),我希望将 select 语句的某些列设置为 null编辑目的。

所以,假设我有基本查询:

SELECT first_name, last_name, age, phone, address
FROM people;

这将返回一个类似于以下内容的表:

|first_name|last_name|age|phone|address       |
------------------------------------------------
|Joe |Someone |12 |123 |1234 Somewhere|
|Bob |Other |45 |982 |4321 Somewhere|

我希望能够做这样的事情:

SELECT
first_name,
last_name,
if(people.field IN (
SELECT other_table.some_id FROM other_table WHERE other_table.field = 'is good')
)
age, phone, address
else
NULL
FROM people;

我想要的结果是:

|first_name|last_name|age  |phone|address       |
------------------------------------------------
|Joe |Someone |12 |123 |1234 Somewhere|
|Bob |Other |NULL |NULL |NULL |

这可能吗?

最佳答案

应该可以通过将子查询放在LEFT JOIN中来解决这个问题。然后使用 CASESELECT将输出列设置为 NULL 子句当需要时:

SELECT
p.first_name,
p.last_name,
CASE WHEN s.some_id IS NOT NULL THEN p.age END AS age,
CASE WHEN s.some_id IS NOT NULL THEN p.phone END AS phone,
CASE WHEN s.some_id IS NOT NULL THEN p.address END AS address
FROM people p
LEFT JOIN other_table s ON s.some_id = p.field AND s.field = 'is good'

您需要注意的是连接的基数。。如果other_table中有几条记录匹配单个people记录,那么您将得到重复的输出行。为了避免这种情况,一种解决方案是使用 SELECT DISTINCT ,或者通过添加子句 GROUP BY p.first_name, p.last_name, p.age, p.phone, p.address 来打开聚合在查询末尾。

关于SQL - 根据条件将某些列设置为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54488787/

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