【问题标题】:WHERE IN query? [duplicate]在哪里查询? [复制]
【发布时间】:2015-10-01 08:48:26
【问题描述】:

使用下一个数据库:

我需要选择所有在他们自己的星球上战斗过的士兵,我不知道如何才能做到。

这是我尝试过的。

SELECT id_soldier, name 
FROM soldier, battle_log, battle 
WHERE IN(...soldier.planet_id = battle.id_planet_battle...) 

【问题讨论】:

    标签: mysql where-in


    【解决方案1】:

    由于我无法访问数据库,因此无法对其进行测试,但您可以尝试一下吗?

    SELECT id_soldier, name 
    FROM soldier s 
    LEFT JOIN battle_log l ON s.id_soldier = l.soldier_id 
    LEFT JOIN battle b ON l.battle_id = b.id_battle 
    WHERE s.planet_id = b.id_planet_battle
    

    如果它返回错误,请告诉我,我们会尝试修复它。

    【讨论】:

    • @javipedrera 很高兴为您提供帮助
    【解决方案2】:

    您可以使用not exists 运算符排除参加过其他星球战斗的士兵:

    SELECT *
    FROM   soldier s
    WHERE  NOT EXISTS (SELECT *
                       FROM   battle b
                       JOIN   battle_log bl ON b.id_battle = bl.battle_id
                       WHERE  bl.soldier_id = s.id_soldier AND
                              b.id_planet_battle != s.planet_id)
    

    【讨论】:

    • 谢谢,这行得通。你帮了我很多:D
    【解决方案3】:

    我认为您可以使用简单查询并加入此步骤。

    如果我理解正确,士兵加入星球(士兵有自己的星球) 然后加入星球大战(因为那个士兵的星球有战斗)

    【讨论】:

    • 如果你用battle_log加入士兵并最终战斗,你的路径会更短;)
    • 啊...实际上我的流程只有 3 个主要实体(士兵、行星和战斗)等于您的流程:)
    • 但是不加battle_log怎么知道士兵是否在某个星球上打过仗呢?
    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2020-12-19
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    相关资源
    最近更新 更多