我有两个表,一个是mailing_events表,一个是mailing_outletcontact表。下面是我的表格的例子。
邮寄表非常简单,没有副本:
+-------+------------+--------------------------+
| id | mailing_id | email |
+-------+------------+--------------------------+
| name1 | 12 | name1.company@gmail.com |
| name2 | 15 | name2@gmail.com |
| name3 | 20 | name3@gmail.com |
+-------+------------+--------------------------+我的第二个表"mailing_outletcontact“在电子邮件字段中有副本。
+----+-------------------------+------------------+--------------+
| id | email | outletcontact_id | email_number |
+----+-------------------------+------------------+--------------+
| 1 | name1.company@gmail.com | 6 | 5 |
| 2 | name1.company@gmail.com | 6 | 6 |
| 3 | name1.company@gmail.com | 6 | 7 |
| 4 | name2@gmail.com | 8 | 8 |
| 5 | name3@gmail.com | 4 | 9 |
| 6 | name2@gmail.com | 8 | 10 |
+----+-------------------------+------------------+--------------+我试图查询Datastudio中的数据库,我的目标是用我的第一个表数据获取"outletcontact_id“字段。
但是,我尝试做一个左联接,因为第二个表中有多个值,所以我必须选择一个行来匹配。对我来说,它匹配的行并不重要,我决定选择一个具有最高id字段的行。
我的代码是:
SELECT
mailing_events.mailing_id,
mailing_events.email,
new_mailing_outletcontact.outletcontact_id
FROM
mailing_events
LEFT JOIN(
select *
from mailing_outletcontact
where id in(select max(id) from mailing_outletcontact group by email)
) as new_mailing_outletcontact
on mailing_events.email = new_mailing_outletcontact.email;
SELECT
mailing_events.mailing_id,
mailing_events.email,
new_mailing_outletcontact.outletcontact_id
FROM
mailing_events
LEFT JOIN(
select *
from mailing_outletcontact
where id in(select max(id) from mailing_outletcontact group by email)
) as new_mailing_outletcontact
on mailing_events.email = new_mailing_outletcontact.email;这不管用,有人知道我哪里出了问题吗。或者如何彻底解决我的问题。它使用我的第一个表数据获取"outletcontact_id“字段。
编辑:,我在Datastudio中运行,所以错误消息不是很好。在联机查看后,错误ID也不会提供任何值。错误信息是:
The query returned an error.
Error ID: 3ab6a2cd第二次编辑: shawnt00提供的答案在SQL软件(如DBeaver )中工作。所以,如果你是用类似的问题来阅读这篇文章的话,那应该是有帮助的。
在使用SQL连接的Datastudio中,它仍然不能工作,所以他们可能会使用不同的标准或其他什么?
发布于 2021-03-30 16:42:13
SELECT
me.mailing_id, me.email,
(
select max(moc.outletcontact_id)
from mailing_outletcontact moc
where moc.email = me.email
) as outletcontact_id
FROM
mailing_events me;发布于 2021-03-30 16:25:51
如果我没听错的话,你要找的是:
SELECT
mailing_events.mailing_id,
mailing_events.email,
new_mailing_outletcontact.outletcontact_id
FROM
mailing_events
CROSS JOIN (
select *
from mailing_outletcontact
where mailing_events.email = new_mailing_outletcontact.email
order by mailing_outletcontact.Id DESC
LIMIT 1
) as new_mailing_outletcontact 发布于 2021-03-30 16:44:35
试一试其中一种:
SELECT
mailing_events.mailing_id,
mailing_events.email,
new_mailing_outletcontact.outletcontact_id
FROM
mailing_events
LEFT JOIN (
select distinct email, outletcontact_id
from mailing_outletcontact
) as new_mailing_outletcontact
USING (email)或
SELECT DISTINCT
mailing_events.mailing_id,
mailing_events.email,
mailing_outletcontact.outletcontact_id
FROM mailing_events
LEFT JOIN mailing_outletcontact
USING (email)https://stackoverflow.com/questions/66874699
复制相似问题