2017-06-27 14 views
1

這裏發生了這麼有趣的事情,我使用MySql DB並試圖根據同一個表中的同一列進行連接(我在不同的別名下選擇了該連接) 。如果有人能告訴我這個問題的原因和/或可能修復我的SQL,我將不勝感激。連接來自同一個表的列兩次會導致未知的列問題

我有什麼是三個表:

Tourneyplayers:

tp_id | tourneyId | ageId 
1  | 1   | 1 
2  | 1   | 1 
3  | 1   | 2 

這有涉及到我的比賽所有主要球員的數據。它將實際玩家資料和錦標賽鏈接在一起。

預賽:

heatId | heatNumber 
1  1 
2  3 
3  4 

預賽基本上是莫託斯的基團。

MOTOS:

mid | idHeat | result | tpid 
1 | 1  | 1  | 1 
2 | 3  | 1  | 1 
3 | 1  | 2  | 2 
4 | 3  | 2  | 2 
3 | 2  | 3  | 3 

這是我想從基礎上heatNumber值的兩倍查詢結果表。 heatNumber值是靜態的,它們是1 AND 4

所以我想我的查詢從表motos返回的結果,如果heatNumber1,並從表motos返回的結果,如果heatNumber4並限制我的結果tourneyIdageId

所以,如果我想查詢結果與tourneyId = 1ageId = 1那麼結果將是:

結果:

tp_id | result_when_heat_number_is_1 | result_when_heat_number_is_4 | sum_of_results 
1  | 1       | 1       | 2 
2  | 2       | 2       | 4 

我試着寫了查詢,但我不那麼熟悉SQL我已經慘遭失敗(未完成和已損壞):

SELECT tp.tp_id, m1.result as r1, m2.result as r2 
FROM tourneyplayers tp, motos m1, motos m2 
INNER JOIN heats as h1 ON (m2.idHeat = h1.heatId) 
INNER JOIN heats as h2 ON (m1.idHeat = h2.heatId) 
WHERE tp.tp_id = m1.tpid 
AND tp.tp_id = m2.tpid 
AND tp.tourneyId = 115 
AND ageId = 16 

我不知道如果我有一個正確的道路上,我嘗試加入預賽TWIC e爲兩個motos,但這給了我一個錯誤#1054 - Unknown column 'm1.idHeat' in 'on clause',我跑出了想法。希望有人能幫助:)

回答

1

嘗試使用連接定義WHERE條款:

SELECT tp.tp_id, m1.result as r1, m2.result as r2 
FROM tourneyplayers tp, motos m1, motos m2 
,heats h1, heats as h2 
WHERE tp.tp_id = m1.tpid 
AND tp.tp_id = m2.tpid 
AND tp.tourneyId = 115 
AND ageId = 16 
AND m2.idHeat = h1.heatId 
AND m1.idHeat = h2.heatId 
+0

添加heatNumber = 1&heatnumber = 4解決了這個問題,因爲你更快(並且給出了與@scaisEdge相同的結果),我將你標記爲答案:) – Banana

2

確保您有一個MOTOS和idHeat 不混合隱性和顯性加入

SELECT 
    tp.tp_id 
    , m1.result as r1 
    , m2.result as r2 
    FROM tourneyplayers tp 
    INNER JOIN motos as m1 ON tp.tp_id = m1.tpid 
    INNER JOIN motos as m2 ON tp.tp_id = m2.tpid 
    INNER JOIN heats as h1 ON m2.idHeat = h1.heatId 
    INNER JOIN heats as h2 ON m1.idHeat = h2.heatId 
    WHERE tp.tourneyId = 115 
    AND ageId = 16 
相關問題