内联3张表,if条件检索
Inner join 3 tables, retrieve if conditions
我有三张表
Person
- id
- other_fields
PersonTypes
- id
- person_id
- type_id
PersonEmails
- id
- person_id
- email_address
如何只获取 PersonTypes.type_id 不同于 value
的电子邮件地址?
我正在使用 MariaDB v.10,我尝试在所有表中使用左外连接,然后 return 仅 type_id 不同的这些行。但是我不确定结果。
SELECT pe.email_address
FROM Person p
LEFT OUTER JOIN PersonTypes pt ON p.id = pt.person_id
LEFT OUTER JOIN PersonEmails pe ON p.id = pe.person_id
WHERE pt.type_id != 14;
select P1.id,
P2.type_id, -- just for the sake of this output
P2.email_address
from Person P1
inner join
(
select PT.person_id, PT.type_id, PE.email_address
from PersonTypes PT
inner join PersonEmails PE
on PE.person_id = PT.person_id
where PT.type_id <> 14
) P2
on P2.person_id = P1.id
或
select pe.email_address
from PersonEmails pe
where person_id not in
(
select person_id
from PersonTypes
where Type_id = 14
)
查询选择所有没有 type_id 14 的人并加入 Person 和 PersonsEmails 表数据
SELECT pe.email_address
FROM PersonTypes pt
INNER JOIN Person p ON pt.person_id = p.id
INNER JOIN PersonEmails pe ON pt.person_id = pe.person_id
WHERE pt.type_id != 14;
我有三张表
Person
- id
- other_fields
PersonTypes
- id
- person_id
- type_id
PersonEmails
- id
- person_id
- email_address
如何只获取 PersonTypes.type_id 不同于 value
的电子邮件地址?
我正在使用 MariaDB v.10,我尝试在所有表中使用左外连接,然后 return 仅 type_id 不同的这些行。但是我不确定结果。
SELECT pe.email_address
FROM Person p
LEFT OUTER JOIN PersonTypes pt ON p.id = pt.person_id
LEFT OUTER JOIN PersonEmails pe ON p.id = pe.person_id
WHERE pt.type_id != 14;
select P1.id,
P2.type_id, -- just for the sake of this output
P2.email_address
from Person P1
inner join
(
select PT.person_id, PT.type_id, PE.email_address
from PersonTypes PT
inner join PersonEmails PE
on PE.person_id = PT.person_id
where PT.type_id <> 14
) P2
on P2.person_id = P1.id
或
select pe.email_address
from PersonEmails pe
where person_id not in
(
select person_id
from PersonTypes
where Type_id = 14
)
查询选择所有没有 type_id 14 的人并加入 Person 和 PersonsEmails 表数据
SELECT pe.email_address
FROM PersonTypes pt
INNER JOIN Person p ON pt.person_id = p.id
INNER JOIN PersonEmails pe ON pt.person_id = pe.person_id
WHERE pt.type_id != 14;