INNER JOIN的反面

时间:2015-10-09 10:11:43

标签: sql sql-server

我有Inner Join的查询。

查询1

   select *
     from vehicle_models vmodel
     Inner join ogpo_voilure_model md on md.Name = vmodel.VEHICLE_MODEL

现在,我需要这些ID中不存在的数据。用另一个词 - 相反Inner JOIN

我尝试进行我需要的查询,但没有成功。

查询2

Select top 500 *
 from ogpo_voilure_model md
 Where md.id not in
 (
 select md.id
     from Novelty.dbo.vehicle_models vmodel
     Inner join [ogpo_voilure_model] md on md.Name = vmodel.VEHICLE_MODEL
 )

我在StakOverflow的答案中找到this(sixth example)。但我的字段不是NULL

我如何实现它?

2 个答案:

答案 0 :(得分:0)

内连接意味着您希望所有内容都在集合表 vehicle_models 中,但在 ogpo_voilure_model

中还有一个或多个相关行

如果您定义了对面,因为所有内容都在 vehicle_models 中,但在 ogpo_voilure_model

中没有关联

您所需要的只是:

select *
     from [Novelty].[dbo].[vehicle_models] vmodel
     Where vmodel.VEHICLE_MODEL not in
     (
       select md.Name
       from [Novelty].[dbo].[ogpo_voilure_model] md
     )

遵循该定义即使结果返回零行也是正确的。 如果这不是正确答案,您必须首先定义内部联接的相反内容。例如,您可能想要交换表格。

答案 1 :(得分:0)

你是什么意思"我的字段不是NULL"?

您在问题中提供的link有一个答案:FULL JOIN

SELECT *
FROM 
    vehicle_models vmodel
    FULL JOIN ogpo_voilure_model md on md.Name = vmodel.VEHICLE_MODEL
WHERE
    md.Name IS NULL
    OR vmodel.VEHICLE_MODEL IS NULL
;

这将返回vehicle_modelsogpo_voilure_model中没有共同车辆型号名称的行。

如果您可以在问题和预期结果中添加一些示例行,那将会有所帮助。