如果 id 在另一个 table 中匹配,则添加带有 TRUE/FALSE 的列
Add column with TRUE/FALSE if id matches in another table
这是我当前的查询:
select * from modeles JOIN marques ON modeles.marque_id = marques.marque_id
我想在返回的数据中添加一个名为“isActive”的列,它应该包含 TRUE 或 FALSE(或 1 / 0),具体取决于另一个 table(modeles_scrape)是否包含modeles.display_name = modeles_scrape.marque
的行
因此,预期结果:
modele_name;modele_id;marque_name;marque_id;isActive
"Captur";1;"Renault";1;TRUE
我理解这是一个已经被问过的问题,但我找到的解决方案加入了 modeles_scrape table,这不是我想要实现的。
SELECT modeles.*,
marques.*,
modeles_scrape.marque IS NOT NULL isActive
FROM modeles
JOIN marques ON modeles.marque_id = marques.marque_id
LEFT JOIN modeles_scrape ON modeles.display_name = modeles_scrape.marque
如果 modeles_scrape
可能包含 1 个以上的匹配行,则添加 DISTINCT 以避免输出中出现重复。
The OP said he specifically did not want a join. Whilst I agree that this is the most natural way to go, I think the OP is looking for EXISTS with a sub select. – Jonathan Willcock
没问题。
SELECT *,
EXISTS ( SELECT NULL
FROM modeles_scrape
WHERE modeles.display_name = modeles_scrape.marque) isActive
FROM modeles
JOIN marques ON modeles.marque_id = marques.marque_id
是的,当 modeles_scrape
table 太宽时,这可能更有效。
您可以使用 exists
和相关的子查询:
select mo.*, ma.*, -- better enumerate the columns you want here
exists (select 1 from modeles_scrape ms where ms.marque = ma.display_name ) as isactive
from modeles mo
inner join marques ma using(marque_id)
这是我当前的查询:
select * from modeles JOIN marques ON modeles.marque_id = marques.marque_id
我想在返回的数据中添加一个名为“isActive”的列,它应该包含 TRUE 或 FALSE(或 1 / 0),具体取决于另一个 table(modeles_scrape)是否包含modeles.display_name = modeles_scrape.marque
的行因此,预期结果:
modele_name;modele_id;marque_name;marque_id;isActive
"Captur";1;"Renault";1;TRUE
我理解这是一个已经被问过的问题,但我找到的解决方案加入了 modeles_scrape table,这不是我想要实现的。
SELECT modeles.*,
marques.*,
modeles_scrape.marque IS NOT NULL isActive
FROM modeles
JOIN marques ON modeles.marque_id = marques.marque_id
LEFT JOIN modeles_scrape ON modeles.display_name = modeles_scrape.marque
如果 modeles_scrape
可能包含 1 个以上的匹配行,则添加 DISTINCT 以避免输出中出现重复。
The OP said he specifically did not want a join. Whilst I agree that this is the most natural way to go, I think the OP is looking for EXISTS with a sub select. – Jonathan Willcock
没问题。
SELECT *,
EXISTS ( SELECT NULL
FROM modeles_scrape
WHERE modeles.display_name = modeles_scrape.marque) isActive
FROM modeles
JOIN marques ON modeles.marque_id = marques.marque_id
是的,当 modeles_scrape
table 太宽时,这可能更有效。
您可以使用 exists
和相关的子查询:
select mo.*, ma.*, -- better enumerate the columns you want here
exists (select 1 from modeles_scrape ms where ms.marque = ma.display_name ) as isactive
from modeles mo
inner join marques ma using(marque_id)