如果 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)