根据where条件值创建mysql查询结果?

4
我希望得到这样的输出。
ID      Status
100     Viewed
103     Not Viewed
105     Viewed

这是我的SQL语句:
select id, status from status_table where ID in (100, 101,102,103,104,105);

由于在状态表中其他id没有任何条目,因此它将显示上述结果。ID是另一个名为table_file table的表的外键。它包含在另一个数据库中。因此,由于某些性能问题,我无法加入该表。 因此,我将文件ID作为逗号分隔值传递。但是我想要这种类型的结果。如何在不使用任何循环的情况下创建此结果。

ID    Status
100   Viewed
101   Not
102   Not
103   Viewed
104   Not
105   Viewed

这是可能的吗?请帮我。

2个回答

1

你有一个包含这些ID的表吗?这样你就可以在它上面进行连接了。

SELECT
  source.ID,
  status.value
FROM
  source
LEFT JOIN
  status
    ON status.id = source.id
WHERE
  source.ID in (100, 101,102,103,104,105);

如若没有,您需要创建一个临时表或内联表(其中包含这些值)。 然后,您只需将该表连接到您的数据即可。

编辑

内联表示例。有几种方法可以实现这一点,这只是其中之一。

SELECT
  source.ID,
  status.value
FROM
  (
    SELECT 100 AS id UNION ALL
    SELECT 101 AS id UNION ALL
    SELECT 102 AS id UNION ALL
    SELECT 103 AS id UNION ALL
    SELECT 104 AS id UNION ALL
    SELECT 105 AS id
  )
  AS source
LEFT JOIN
  status
    ON status.id = source.id

不好意思,我的源表和状态表存在于两个不同的数据库中,所以无法进行连接。为了解决一些性能问题,我正在重写我的SQL语句。我认为创建表、插入数据、获取数据,最后删除临时表对网站没有任何性能提升。 - DEVOPS
@learner - 那你低估了临时表的速度。但也要考虑内联表...我现在会编辑一个例子...[另外,请注意这回答了你按照你所问的问题 ;)] - MatBailie

0
假设当缺少ID时,你可以这样做:
SELECT
  so.ID,
  CASE WHEN st.value IS NULL THEN 'Not' ELSE st.value END
FROM
  databasename1..source so
LEFT JOIN
  databasename2..status st
    ON st.id = so.id
WHERE
  so.ID in (100, 101,102,103,104,105)

databasename1databasename2替换为实际的数据库名称

抱歉,我无法使用源表格进行连接。请问还有其他建议吗? - DEVOPS
现在我所说的呢? - aF.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接