【问题标题】:SQL: How to search two columns within a nested query?SQL:如何在嵌套查询中搜索两列?
【发布时间】:2020-11-11 18:07:35
【问题描述】:

在我的数据库中,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' )));

感谢您的帮助。我对此很陌生。

【问题讨论】:

  • 查看JOINs
  • 查看格式化代码以提高可读性。缩进有很长的路要走。
  • 您可能误解了OR 在您的WHERE l.origin OR l.end ... 子句中的工作方式:它确实不是 的意思是“找到originend 所在的行trainstation ids 列表。它的意思是“找到那些origin 具有值或end 在trainstation ids 列表中的行。比较the documentation of the OR operator

标签: mysql sql operators dbeaver


【解决方案1】:

添加到 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
; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-01
    • 2015-09-24
    • 1970-01-01
    • 2020-07-26
    • 2015-02-20
    • 2021-12-19
    • 2015-06-29
    • 2017-06-11
    相关资源
    最近更新 更多