Mysql,连接表并具有来自不同行的多个条件

时间:2016-12-13 13:54:17

标签: mysql

我有2个表,一封电子邮件:id,电子邮件和一个meteemails:id,eid(来自电子邮件的id),field_name,field_info)

ill举个例子:我在发送一些电子邮件的metaemails:field_name =“source”,field_info =“uk”; field_name =“status”,field_value =“active”。

我想查询在metaemails中包含这些字段的所有电子邮件。

提前致谢

1 个答案:

答案 0 :(得分:0)

它看起来有点棘手,你不能加入这两个表并放置两个WHERE条件:如果你做了类似的事情

WHERE field_name = 'source' AND field_info = 'uk'
AND field_name = 'status' AND field_info = 'active'

你总是会得到零结果,因为那个条件总是假的,因为同一个字段不能有两个不同的值。

获取所需信息的一种方法是:为您需要的每个元值执行JOIN。 例如,查询:

SELECT e.id, mesrc.field_value source, mesta.field_info status
FROM emails e
JOIN metaemails mesrc ON e.id = mesrc.eid AND mesrc.field_name = 'source'
JOIN metaemails mesta ON e.id = mesta.eid AND mesta.field_name = 'status';

会给你这样的东西:

id  source  status
1   uk      active
2   fr      active
3   uk      inactive

我编制了数据,当然(你可以看到我做了here)。基本上,我们是第一次将每封电子邮件与一个"来源" meta,第二次将它与" status"元。现在,您实际上可以使用所需的WHERE条件,例如:

SELECT e.id, mesrc.field_value source, mesta.field_info status
FROM emails e
JOIN metaemails mesrc ON e.id = mesrc.eid AND mesrc.field_name = 'source'
JOIN metaemails mesta ON e.id = mesta.eid AND mesta.field_name = 'status'
WHERE mesrc.field_info = 'uk'
AND mesta.field_info = 'active';