簡體   English   中英

MySQL LEFT OUTER JOIN 沒有給出正確的結果

[英]MySQL LEFT OUTER JOIN not giving correct results

這可能很簡單,但我看不到問題...

我有一個 MySQL 表,其中包含按標題列出的郵件列表索引。 該表是 LISTS。 然后是一個用戶表和一個訂閱表。 訂閱表包含將用戶鏈接到他們的郵件列表的簡單條目。

關注的列是:

USERS u_id
LISTS l_id
SUBS s_id, u_id, l_id

所以當用戶 23 加入郵件列表 7 時,在 SUBS 中創建的條目是:

s_id: 1 --
u_id: 23 --
l_id: 7

問題是:當用戶查看他們的訂閱時,我需要顯示一個顯示所有郵件列表的表格,每個列表都有一個復選框,如果他們已經訂閱了該列表,則勾選該復選框。

我的 SQL,這是錯誤的,但我不確定如何,在這里:

SELECT l.l_id, l.l_name, l.l_desc,
CASE
 WHEN s.u_id = '23' THEN 1 ELSE 0 
END
FROM lists as l
LEFT OUTER JOIN
subs as s
ON s.l_id = l.l_id 
GROUP BY l.l_id ASC

這應該顯示 1 以勾選相關框,並顯示 0 以將它們留空。

但是這種行為很奇怪,因為當我從 subs 中得到 * 時,我會看到所有預期的內容。 但是,上面的 SQL 會返回幾個存在訂閱的空復選框。 更奇怪的是,如果所有的框都被勾選了,SQL 根本不返回任何勾選。

我已經和這件事斗爭了太久了。 有人可以提供解決方案嗎?

非常感謝!

問題不在於LEFT JOIN ,而在於聚合。 您需要在SELECT聚合函數。

但是,我認為您根本不需要聚合。 假設一個用戶ID只能出現一次lists了一個給定的名單:

SELECT l.l_id, l.l_name, l.l_desc,
       (s.l_id is not null) as flag
FROM lists l LEFT OUTER JOIN
     subs s
     ON s.l_id = l.l_id AND s.u_id = 23;

可以按照自己的方式表達查詢(使用聚合)。 它看起來像:

SELECT l.l_id, l.l_name, l.l_desc,
       MAX(s.u_id = 23) as flag
FROM lists l LEFT OUTER JOIN
     subs s
     ON s.l_id = l.l_id 
GROUP BY l.l_id, l.l_name, l.l_desc;

您也可以使用MAX(CASE s.u_id = 23 THEN 1 ELSE 0 END) ,但 MySQL 的布爾簡寫更方便和可讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM