我會寫像這樣的查詢:
SELECT newsletter.email, newsletter.role,
IF(newsletter.role='buyer' AND buyers.join_id IS NOT NULL,buyers.first_name,
IF(newsletter.role='seller' AND sellers.join_id IS NOT NULL,sellers.first_name,
'Not Found')
) AS first_name
FROM newsletter
LEFT JOIN buyers ON newsletter.join_id = buyers.join_id
LEFT JOIN sellers ON newsletter.join_id = sellers.join_id
WHERE newsletter.active = 1
的想法是使用LEFT JOIN
而不是INNER JOIN
,所以我們包含NULL數據,然後我們加入buyers
表和sellers
表。加入後,我們使用if語句根據用戶在時事通訊日誌中的角色選擇我們想要的內容。
編輯:
如果你不希望看到「未找到」喜歡在上面,你可以跳過其中newsletter.join_id不匹配的買家或賣家的記錄條目。但是,那麼你不會看到特定日誌的通訊。你會通過調整WHERE
做到這一點:以上
SELECT newsletter.email, newsletter.role,
IF(newsletter.role='buyer',buyers.first_name,sellers.first_name) AS first_name
FROM newsletter
LEFT JOIN buyers ON newsletter.join_id = buyers.join_id
LEFT JOIN sellers ON newsletter.join_id = sellers.join_id
WHERE newsletter.active = 1 AND (
(newsletter.role='buyer' AND buyers.join_id IS NOT NULL)
OR
(newsletter.role='seller' AND sellers.join_id IS NOT NULL)
)
可能是比較容易的工作,特別是如果你需要從不是買方/賣方表中選擇多個列。
編輯2:
有關管理的情況下,你只需要添加OR newsletter.role='admin'
的條件,那麼它會尋找在賣家表您的信息。或者,你可以硬編碼你的名字信息if語句:
SELECT newsletter.email, newsletter.role, (
CASE newsletter.role
WHEN 'buyer' THEN buyers.first_name
WHEN 'seller' THEN sellers.first_name
WHEN 'admin' THEN 'Hard-code your name here'
ELSE 'unknown' END
) AS first_name
FROM newsletter
LEFT JOIN buyers ON newsletter.join_id = buyers.join_id
LEFT JOIN sellers ON newsletter.join_id = sellers.join_id
WHERE newsletter.active = 1 AND (
(newsletter.role='buyer' AND buyers.join_id IS NOT NULL)
OR
(newsletter.role='seller' AND sellers.join_id IS NOT NULL)
OR newsletter.role='admin'
)
花了我一段時間瞭解你的問題,但我現在看到它。你有一個買家表和一個賣家表。然後你的'通訊'表有一個列'角色',它包含一個字符串,無論是「買方」還是「賣方」,那麼你需要根據字符串''買方'或' newsletter.role'字段包含該特定成員。啊。 – Ultimater
請不要編輯我的文章,你做到了,所以有人剛剛學習就不知道你在說什麼。現在,初學者很容易跟蹤。 – user3154948
我非常不同意,因爲你瞭解自己的情況可能很清楚,但對任何旁觀者來說,他們看到的只是一個查詢,它不能解釋它應該做什麼,以及整個問題的錯誤語法它很難遵循,並且查詢甚至不適合1頁,因爲它全部在1行上。我的編輯幫助了在stackoverflow上使用問題的質量,但如果您想討論它,請閱讀:http://stackoverflow.com/help/how-to-ask我們已經在此建立策略。如果你不想讓我編輯你的問題,那還不清楚,那爲什麼要回答呢? – Ultimater