【问题标题】:SQL: SELECT where 2 columns from different tables are the sameSQL:SELECT,其中来自不同表的 2 列相同
【发布时间】:2016-10-03 01:09:02
【问题描述】:

我需要使用包含(前)总统信息的数据库。我需要检查是否有总统有相同的爱好并且在同一年结婚。

所以一个总统可以在 pres_hob 表中有多个爱好。结婚年份在 pres_mar 表的 mar_year 列中。

我尝试在 SQLite 中将爱好和 mar_year 相同的表进行 INNER JOIN,但 pres_name 除外。这样 JOIN 就不起作用了,这是有道理的。我对此有点陌生..

感谢任何帮助

【问题讨论】:

    标签: mysql sql sqlite join subquery


    【解决方案1】:

    这是一个有多个joins的选项:

    select p1.pres_name, p2.pres_name, ph.hobby
    from pres_mar p1
         join pres_mar p2 on p1.pres_name != p2.pres_name and p1.mar_year = p2.mar_year
         join pres_hob ph on p1.pres_name = ph.pres_name
         join pres_hob ph2 on p2.pres_name = ph2.pres_name and ph.hobby = ph2.hobby
    

    根据您的预期结果,使用exists 的另一个选项:

    select pm.pres_name, ph.hobby
    from pres_mar pm 
         join pres_hob ph on pm.pres_name = ph.pres_name
    where exists (
        select 1
        from pres_mar pm2
             join pres_hob ph2 on pm2.pres_name = ph2.pres_name
        where pm.pres_name != pm2.pres_name and
              ph.hobby = ph2.hobby
        )
    

    【讨论】:

    • 您好,您的第一个连接选项非常完美。非常感谢!
    【解决方案2】:

    这听起来像是一个糟糕的数据库架构,我假设它是出于学习目的,无论如何,你可以做类似的事情

    SELECT
      h.name,
      h.hobby,
      m.year
    FROM
      pres_hob h,
      pres_mar m
    WHERE
      h.hobby = 'tennis'
    AND
      m.year = 2016
    

    这将为每位结婚年份为 2016 年且爱好网球的总统返回 1 条记录。

    【讨论】:

    • 您好,感谢您的回答,确实是家庭作业。我不能硬编码这些值..
    猜你喜欢
    • 2022-01-21
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 2018-09-05
    • 2019-02-08
    • 2015-11-30
    相关资源
    最近更新 更多