我寫了一個查詢來更新資料庫上物件的 imageSrc : UPDATE BOXES SET BOXES.IMAGESRC = ?1 WHERE BOXES.ID = ?2,它確實有效,因為我在資料庫中檢查了我的表Boxes并且它正確更新了 ID=1 的 Box的imageSrc。(結果在這里)
當我執行以下 LEFT JOIN 查詢時,我的問題出現了,SELECT * FROM BOXES AS A LEFT JOIN MATCHES_BOXES AS B ON A.ID=B.MATCH_ID WHERE B.MATCH_ID LIKE ?1因為它給了我 ID=1 的 Box 和 OLD imageSrc(LEFT JOIN 的結果)
如您所見,ID=1 的 BOX 沒有包含正確的 imageSrc (/resources/images/cards/blue-01.png),而是包含舊的 imageSrc (/resources/images/celda.png)
這對我來說沒有意義,因為我與表 Boxes LEFT JOINED,其中 ID=1 的 Box 已經具有正確的 imageSrc,但回傳舊的。
uj5u.com熱心網友回復:
這發生在左連接上的 where 子句將查詢轉換為內部連接時。
SELECT *
FROM BOXES AS A
LEFT JOIN MATCHES_BOXES AS B
ON A.ID=B.MATCH_ID
WHERE B.MATCH_ID LIKE ?1
分析場景,如果您想在 Boxes 中獲得記錄,而不管它是否存在于 MATCHES_BOXES 中,那么對于 B 中缺少的 MATCH_ID(即 no_row_exists),來自 B 的結果行都將為 NULL。
但是由于您在 JOIN 后得到 WHERE B.MATCH_ID LIKE '?1' 條件,它將否定那些缺少的 MATCH_ID,因為您基本上檢查 WHERE NULL 像 '?1' 并且由于 NULL 不能等同于任何東西,丟失的記錄是未在查詢中檢索。
如果您的目的是從 BOXES 中獲取所有記錄,即使它們不存在于 MATCHES_BOXES 中,以及來自 ID 上 MATCHES_BOXES 中存在的 BOXES 中的記錄,并且您希望僅在 MATCH_ID LIKE '?1' 時才將它們帶入,您將加入在 AND 條件下如下
SELECT *
FROM BOXES AS A
LEFT JOIN MATCHES_BOXES AS B
ON A.ID=B.MATCH_ID
AND B.MATCH_ID LIKE ?1 /*use AND instead of WHERE*/
uj5u.com熱心網友回復:
外連接似乎沒有多大意義。無論如何,您正在選擇MATCHES_BOXES尋找特定的MATCH_ID(示例結果中的 3)。您BOXES在同一列上加入表。因此,您顯示BOXES的ID3.MATCHES_BOXES也有一列BOXES_ID。BOXES然而,這與連接的行無關。當您看到IMAGESRCforBOXES行ID3 時,這是因為您正在加入該行。
我想你只是想加入BOXES_ID:
SELECT *
FROM boxes b
JOIN matches_boxes mb ON mb.boxes_id = b.id
WHERE mb.match_id = ?1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399388.html
下一篇:一次選擇與職業相近的學生姓名
