[英]mariadb - LEFT OUTER JOIN
最近遷移了服務器,我發現了這個“錯誤”,我將mysql作為數據庫,而我想要的(我不是SQL方面的專家)是通過1:N連接2個相關的表,例,
Table 1: Badges_Person
Table 2: Badges
徽章是帶有徽章的表,並且Badges_Person包含一個類似(id_badge,id_person)的關系,容易嗎? 好吧,這個SQL查詢似乎總是可以正常工作:
SELECT id, nombre, descripcion, insignias.time, obtained
FROM insignias LEFT OUTER JOIN
(SELECT *, '1' as obtained
FROM insignias_user
WHERE insignias_user.username = 'Octal'
) as insignias_user_seleccionado
ON insignias.id = insignias_user_seleccionado.id_insignia;
該查詢的輸出是帶有“獲得”列(0或1)的徽章列表,該列表明用戶“八度”是否具有該徽章。
所以...,現在,我將mariadb作為數據庫,它返回一個不同的輸出,其中所有行都標記為“獲得” = 1。
我之所以來到這里,是因為據我所知,我已經放棄了所有可能的愚蠢錯誤。
我無法說出查詢為什么不起作用。 這似乎是一個數據問題-所有行都匹配。
但是,有一種更好的方式來編寫查詢:
SELECT i.id, i.nombre, i.descripcion, i.time, ius.obtained
FROM insignias i LEFT OUTER JOIN
insignias_user iu
ON i.id = ius.id_insignia AND ius.username = 'Octal';
這是非常有效的,因為不需要實現中間表,並且數據庫可以使用insgnias_user
上的適當索引。
另請注意:我將列引用更改為合格的列名稱。 表別名可能不正確。
SELECT i.id, i.nombre, i.descripcion, i.time, IF(ius.id_insignia IS NULL, 0, 1)
FROM insignias i LEFT OUTER JOIN insignias_user ius
ON i.id = ius.id_insignia AND ius.username = 'Octal';
好的,它再次起作用,謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.