带有连锁列的SQL查询

时间:2018-01-18 20:51:01

标签: sql sql-server

我的SQL并不强大,我承认......但我的查询在MS SQL Server中类似于下面的内容:

SELECT p.Product_ID as ID,
      (p.Product_Number + ' - ' +  p.Product_Name) as Name 
FROM Product p;

我想知道,是否可以对该连锁列进行查询?或者我是否必须使用两个WHERE子句并将它们与AND组合?

3 个答案:

答案 0 :(得分:3)

您可以在where子句中使用表达式。像这样:

SELECT p.Product_ID as ID, (p.Product_Number + ' - ' + p.Product_Name) as Name 
FROM Product p
WHERE (p.Product_Number + ' - ' + p.Product_Name) = '123 - Name';

答案 1 :(得分:1)

到目前为止,其他答案仍然有效,但它们根本不会很好地扩展,因为它们是不可用的。这意味着没有索引可以帮助这些查询,因为它必须为表中的每一行执行字符串连接,以确定它是否是有效行。从性能角度来看,使用两个谓词会更好。在我看来,这也使你的查询更加清晰。

从性能的角度来看,这是执行此操作的最佳方式。

SELECT p.Product_ID as ID
    , p.Product_Number + ' - ' + p.Product_Name as Name 
FROM Product p
WHERE p.Product_Number = '123'
    AND p.Product_Name = 'Name';

答案 2 :(得分:0)

如果您的服务器支持,您可以在WHERE子句中使用连接或使用CONCAT()功能:

    SELECT p.Product_ID as ID,
      (p.Product_Number + ' - ' + p.Product_Name) as Name 
     FROM Product p
    where
     p.Product_Number + ' - ' + p.Product_Name = 'blah' ;

    SELECT p.Product_ID as ID,
      concat(p.Product_Number,' - ' ,p.Product_Name) as Name 
     FROM Product p
    where
       concat(p.Product_Number,' - ' ,p.Product_Name) = 'blah' ;