我会写像这样的查询:
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