现有条目我有两个表(X和Y)与列电子邮件(:EmailX表x和EMailY在数据表Y列名)添加一个条目。当表X中的电子邮件地址是表Y中的电子邮件地址之一时,我希望在表X中添加填充了“是”的列,而当表X中的电子邮件地址不是电子邮件地址之一时的“否”在表Y.取决于另一个表MYSQL
我该怎么做?
感谢您的支持!
现有条目我有两个表(X和Y)与列电子邮件(:EmailX表x和EMailY在数据表Y列名)添加一个条目。当表X中的电子邮件地址是表Y中的电子邮件地址之一时,我希望在表X中添加填充了“是”的列,而当表X中的电子邮件地址不是电子邮件地址之一时的“否”在表Y.取决于另一个表MYSQL
我该怎么做?
感谢您的支持!
不要将数据冗余存储在数据库中。由于您始终可以检查表y中是否存在条目,因此不应向表x添加标志来指示此情况。
这里是如何获得与EXISTS
的信息:
select
x.*,
case when exists (select * from y where y.emaily = x.emailx) then 'yes' else 'no' end
as exists_in_y
from x;
同样与IN
我喜欢的是简单的:
select
x.*,
case when emailx in (select emaily from y) then 'yes' else 'no' end as exists_in_y
from x;
与外部同样加入
select
x.*,
case when emaily is not null then 'yes' else 'no' end as exists_in_y
from x
left join (select distinct emaily from y) y on y.emaily = x.emailx;
如果emaily在y中已经是唯一的,您可以选择直接表(left join y on y.emaily = x.emailx
)。
这是一个个人选择什么偏好的问题。我去IN
通常情况下,在使用条件下EXISTS
与<
和>
,并使用时,我想从另一个表中的多个领域的加盟。
添加一个名为“状态”,或什么的列。
将它们全部设置为no。
Update tableX set Status = "no"
where 1=1;
然后
Update tableX
set Status = "Y" where emailX in (select emailY as emailX from tableY).
commit;
希望这有助于。
这里是PHP的解决方案,在INSERT直接更新X表中的列 'INY':
$query = "INSERT INTO `X` (
`emailX`,
`inY`
) VALUES (
'$email',
IF ((SELECT
COUNT(Y.emailY)
FROM Y
WHERE Y.emailY = '$email'
LIMIT 1
) > 0,'yes','no')
)";
而结果将是:
id email inY ...
1 [email protected] yes ...
2 [email protected] no ...
3 [email protected] no ...
4 ...
但是,也许你可以拿问题逆转了! 这将是simplier问你的数据库,当你做出一个选择表中的X.
例如用“是/否”的结果:
SELECT
X.id,
X.emailX AS email,
IF ((SELECT
COUNT(Y.emailY)
FROM Y
WHERE Y.emailY = X.emailX
LIMIT 1
) > 0,'yes','no') AS inY
FROM X
取而代之的是/否,你甚至可以知道此查询中Y个表中存在多少次emailX:
SELECT
X.id,
X.emailX AS email,
(SELECT
COUNT(Y.emailY)
FROM Y
WHERE Y.emailY = X.emailX
LIMIT 1
) AS inY
FROM X
SELECT解决方案在执行大表时速度较慢。
我认为你的问题有一个错误:它不工作... – AbsoluteBeginner
@AbsoluteBeginner我的IF()声明的开头括号是错误的地方,请让我们重试... – Meloman
数据集是安静的大( X中大约300k行,Y中大约400k行):这样做需要很长时间......目前还没有完成:这是正常的吗? – AbsoluteBeginner
请参阅左加入.. – Strawberry
您不应该在表X中冗余地存储标志。您可以随时检查电子邮件是否存在于表Y中,在任何查询中都带有“IN”,“EXISTS”或甚至外连接。如果您不想在每个查询中都写这个,请为此创建一个视图。 –
如何使用IN或EXISTS解决问题?你能给我写上面例子的代码吗? – AbsoluteBeginner