SQL查询中的WHERE子句

史考特猴子

我认为此查询正在发生的事情是,如果与该产品相关联的GenericAttribute表中没有记录,那么该产品将不会显示。参见下面WHERE子句中的行:“ AND GenericAttribute.KeyGroup ='Product'”

如果GenericAttribute表中没有关联的记录,有没有一种方法可以改写,以便忽略WHERE的那一部分?

另外,看看我的ORDER BY子句,如果产品表中的记录在Pvl_AdDates表中没有关联的记录,还会显示吗?

谢谢!

SELECT DISTINCT Product_Category_Mapping.CategoryId, Product.Id, Product.Name, Product.ShortDescription, Pvl_AdDates.Caption, Pvl_AdDates.EventDateTime, convert(varchar(25), Pvl_AdDates.EventDateTime, 120) AS TheDate, Pvl_AdDates.DisplayOrder, Pvl_Urls.URL, [Address].FirstName, [Address].LastName, [Address].Email, [Address].Company, [Address].City, [Address].Address1, [Address].Address2, [Address].ZipPostalCode, [Address].PhoneNumber 
FROM [Address] 
RIGHT JOIN (GenericAttribute  
RIGHT JOIN (Pvl_Urls RIGHT JOIN (Pvl_AdDates 
RIGHT JOIN (Product_Category_Mapping 
LEFT JOIN Product 
ON Product_Category_Mapping.ProductId = Product.Id) 
ON Pvl_AdDates.ProductId = Product.Id) 
ON Pvl_Urls.ProductId = Product.Id) 
ON GenericAttribute.EntityId = Product.Id) 
ON Address.Id = convert(int, GenericAttribute.Value) 
WHERE 
Product_Category_Mapping.CategoryId=12 
AND GenericAttribute.KeyGroup = 'Product'
AND Product.Published=1 
AND Product.Deleted=0 
AND Product.AvailableStartDateTimeUtc <= getdate() 
AND Product.AvailableEndDateTimeUtc >= getdate() 
ORDER BY 
Pvl_AdDates.EventDateTime DESC, 
Product.Id, 
Pvl_AdDates.DisplayOrder
查尔斯·布雷塔纳

是的,在外部联接的条件(而非where子句)中,在外部联接外侧的表上放置约束(约束)。直到对外部联接进行评估之后,才对条件进行评估,因此在外部表中没有记录的情况下,谓词将为false,并且整个行将被消除,从而消除外部性。联接中的条件是在联接期间进行评估的,然后再添加内侧的行,因此结果集仍将包含它们。

二,格式化格式化,格式化!坚持连接的一个方向(左侧更容易),并为表名使用别名!

SELECT DISTINCT m.CategoryId, p.Id, 
    p.Name, p.ShortDescription, d.Caption, d.EventDateTime, 
    convert(varchar(25), d.EventDateTime, 120) TheDate, 
    d.DisplayOrder, u.URL, a.FirstName, a.LastName, 
    a.Email, a.Company, a.City, a.Address1, a.Address2, 
    a.ZipPostalCode, a.PhoneNumber 
FROM Product_Category_Mapping m
    left join Product p on p.Id = m.ProductId 
        and p.Published=1 
        and p.Deleted=0 
        and p.AvailableStartDateTimeUtc <= getdate() 
        and p.AvailableEndDateTimeUtc >= getdate() 
    left join Pvl_AdDates d ON d.ProductId = p.Id 
    left join Pvl_Urls u ON u.ProductId = p.Id
    left join GenericAttribute g ON g.EntityId = p.Id
        and g.KeyGroup = 'Product'
    left join [Address] a ON a.Id = convert(int, g.Value) 
WHERE m.CategoryId=12                  
ORDER BY d.EventDateTime DESC, p.Id, d.DisplayOrder

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL查询中的动态WHERE子句

来自分类Dev

sql查询-如果WHERE子句中存在

来自分类Dev

sql where子句查询

来自分类Dev

SQL查询:On子句和where子句的条件差异

来自分类Dev

在WHERE子句SQL查询中的CASE语句之间使用AND

来自分类Dev

SQL查询的WHERE子句中的CASE语句

来自分类Dev

WHERE子句中的HIVE SQL子查询

来自分类Dev

SQL查询中不包含where子句

来自分类Dev

SQL查询:在WHERE子句中使用AND / OR

来自分类Dev

SQL查询where子句以进行报告

来自分类Dev

SQL SERVER:子查询中的WHERE子句从外部查询获取属性

来自分类Dev

SQL查询多个where子句

来自分类Dev

SQL:在单个查询中添加多个where子句

来自分类Dev

SQL中的WHERE子句忽略OR

来自分类Dev

SQL Server查询-Where子句的最佳实践

来自分类Dev

SQL Update查询和Where子句

来自分类Dev

SQL Server查询中的用户COUNT()独立于where子句

来自分类Dev

SQL在select或where子句中的插入查询

来自分类Dev

Where子句中的PDO SQL查询错误

来自分类Dev

在SQL Server中查询WITH子句

来自分类Dev

SQL查询中带有总和的Where子句

来自分类Dev

使用多个where子句的SQL Server查询

来自分类Dev

WHERE子句中的SQL查询聚合函数

来自分类Dev

SQL查询中where子句的值是select的父列

来自分类Dev

使用 where 子句透视 sql 查询

来自分类Dev

使用 WHERE IN 子句的 SQL 查询

来自分类Dev

使用 WHERE IN 子句检查多维数组中的值的 SQL 查询

来自分类Dev

如何优化SQL Server查询的where子句

来自分类Dev

动态更改 SQL 查询中的 where 子句