我有一個MySql數據庫中的三個表,我加入查詢獲取ID /值對。如何刪除不必要的加入,更新在哪裏條件
| A | B | C |
| -------- |--------------|---------------|
| id | id | id |
| name | fooId | attributeId |
| desc | value | displayIndex |
| ... | attributeId | ... |
我現在擁有的是:
SELECT C.id, B.value
FROM A, B, C
WHERE A.id = B.attributeId
AND A.id = C.attributeId
AND B.fooId = 25
ORDER BY C.displayIndex
所以基本上我們通過加入A. B和C這曾經是在C表中的條目必須有一個相應的(父)在A表中輸入。但是,這將不再是這種情況。 C表仍將大部分由A表控制,但是,有些情況下我們需要C表中的獨立(始終)條目。
編輯
我希望所有的B和C匹配屬性ID的記錄,但我也希望任何記錄,其中C.attributeId = -1。有人可以幫助我用這個查詢來做什麼嗎?
編輯#2
基於反饋和建議,你們取得了一些谷歌上搜索我現在有這樣的:
(SELECT C.id, B.value, C.displayIndex
FROM B, C
WHERE B.attributeId = C.attributeId
AND B.fooId = 25)
UNION
(SELECT C.id, null, C.displayIndex
FROM C
WHERE C.attributeId = -1)
ORDER BY 3
是否有更好的怎麼辦呢? UNION有什麼問題嗎?
如果沒有A記錄,將有做個B紀錄屬性Id = -1(與C記錄匹配)還是fooId = 25是唯一標識所需B記錄的方法? –
爲我澄清....你是否希望自己獲得b.id,c.value,還是試圖在同一個查詢中獲取這些值和正常的a,b,c設置?這可以通過一個聯合聲明來完成(以亞當的答案和聯合聲明爲你的第一個聲明)。如果你不希望聯合...加入到一個給c.id的子查詢,b.value也可以。不知道這是你要求的。 – Twelfth
我試圖解釋我能做到的最好,如果不夠清楚,真的很抱歉。聯盟的想法聽起來可能是我想要的。我想要所有匹配attributeId的記錄,但我也想要C = -1的任何記錄。這就是我所說的「永遠在線」。 – kasdega