2015-10-01 146 views
-1

下一個數據庫: GWHERE IN查詢?

,我需要選擇誰在他們自己的星球一直ONLY在戰鬥中的所有士兵和我沒有的我怎麼能做出任何的想法。

這是我試過的。

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

回答

2

因爲我沒有訪問數據庫我不能測試它,但你可以試試這個嗎?

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 

如果它返回一個錯誤只是讓我知道,我們會嘗試修復它。

+1

這工作了。 – suarsenegger

+0

@javipedrera很高興幫助 – nowhere

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) 
+0

謝謝,這個工程。你幫了我很多:D – suarsenegger

1

enter image description here

我認爲你可以使用簡單的查詢和加入這一步。

如果我理解正確的戰士加入地球(士兵有自己的星球) 然後通過行星加入戰鬥(因爲星球戰士有它有戰鬥)

+0

如果你加入battle_log並最終戰鬥,你的路徑就會變短;) – nowhere

+0

啊......實際上我的流量只有3個主要實體(戰士,行星和戰鬥)等於你的流量:) –

+0

但是如果你不添加battle_log,你怎麼知道士兵是否在某個星球上進行了戰鬥? – nowhere