首页 > 解决方案 > SQL:如何在嵌套查询中搜索两列?

问题描述

在我的数据库中, ts.ID 仅出现在 l.origin 列中。我需要同时搜索 l.orgin 和 l.destination。为什么当我查询 l.origin OR l.destination 时,它会显示带有 ts.ID 的所有结果,而不是仅显示带有连接到 Sheffield 的 ts.ID 的特定结果。有没有更简单的方法来搜索两列?

SELECT F.name, F.phone
FROM Franchise F
WHERE F.name IN (SELECT C.companyName
FROM company c
WHERE c.routeNumber IN (SELECT c.`number`
FROM Line l
WHERE l.origin OR l.end IN (SELECT ts.ID
FROM TrainStation ts
WHERE ts.description = 'Sheffield' )));

谢谢你的帮助。我对此很陌生。

标签: mysqlsqloperatorsdbeaver

解决方案


添加到 Chris 的评论中,该WHERE l.origin OR l.end IN ...部分可以通过多种方式解决,包括使用一个CASE WHEN块,每个字段(l.origin 和 l.end)分别针对条件进行测试,如下所示:

WHERE
  (CASE
      WHEN l.origin IN (
                       SELECT ts.ID
                       FROM TrainStation ts
                       WHERE ts.description = 'Sheffield')
      THEN 1
      WHEN l.end IN (
                       SELECT ts.ID
                       FROM TrainStation ts
                       WHERE ts.description = 'Sheffield')
      THEN 1
      ELSE 0
      END
) = 1
; 

推荐阅读