以下是该方案。我有一张表,其中包含所有联系方式。另一个包含所有类别列表的表。第三个表是一个关联表,它具有第一个表的ID和第二个表的ID。
这是我的关联表的样子
contactdid -2 | categoryid -1
contactdid -2 | categoryid -2
contactdid -2 | categoryid -3
contactdid -3 | categoryid -1
contactdid -3 | categoryid -3
这是我下面的SQL代码(使用SQLyog生成,i包含where子句)。
SELECT
press_contacts.email
FROM
contacts_category
INNER JOIN press_category
ON (contacts_category.categoryid = press_category.id)
INNER JOIN press_contacts
ON (contacts_category.contactdid = press_contacts.id)
WHERE contacts_category.categoryid = 1 AND contacts_category.categoryid = 2 ;
当我没有在代码中插入AND contacts_category.categoryid = 2
时,我得到输出。
任何想法如何解决这个问题。我显然有数据。 在此先感谢您的帮助。
答案 0 :(得分:5)
contacts_category.categoryid不能同时为1和2,perhabs你的意思是OR而不是AND?
答案 1 :(得分:3)
使用OR
或IN()
代替AND
。
字段不能同时具有两个值
答案 2 :(得分:2)
如果您只想查看这两个类别中包含联系人的电子邮件地址,请尝试:
SELECT press_contacts.email
FROM contacts_category
INNER JOIN press_contacts
ON (contacts_category.contactdid = press_contacts.id)
WHERE contacts_category.categoryid in (1, 2)
GROUP BY press_contacts.email
HAVING COUNT(DISTINCT contacts_category.categoryid)=2