简体   繁体   中英

incorrect syntax near the keyword where for using subquery

SELECT DISTINCT dbo.master_order.order_no,
                dbo.master_order.program_no,
                dbo.Setup_size.size_name,
                dbo.Setup_color.color_name,
                dbo.Setup_color.color_no,
                dbo.transaction_production.total_weight,
                dbo.Setup_yarn.yarn_count,
                dbo.Setup_article_order.article_name,
                dbo.master_order.shipment_date,
                @from AS reprt,
                @to AS reprt1,
                dbo.transaction_order.quantity,
                dbo.transaction_order.gsm
FROM dbo.master_order
INNER JOIN dbo.transaction_order ON dbo.master_order.order_id = dbo.transaction_order.order_id
INNER JOIN dbo.transaction_production ON dbo.transaction_order.trans_id = dbo.transaction_production.trans_id
INNER JOIN dbo.Setup_size ON dbo.transaction_order.size_id = dbo.Setup_size.size_id
INNER JOIN dbo.Setup_yarn ON dbo.transaction_order.yarn_id = dbo.Setup_yarn.yarn_id
INNER JOIN dbo.Setup_article_order ON dbo.transaction_order.article_id = dbo.Setup_article_order.article_id
INNER JOIN dbo.Setup_color ON dbo.transaction_order.color_id = dbo.Setup_color.color_id
AND dbo.Setup_yarn.color_id = dbo.Setup_color.color_id
WHERE dbo.setup_color.color_id=
    (SELECT color_no
     FROM dbo.setup_color) WHERE master_order.shipment_date>=@from
  AND master_order.shipment_date<=@to

This is your syntax after WHERE clause

   where dbo.setup_color.color_id=
   (select color_no from dbo.setup_color) 
    where master_order.shipment_date>=
   @from and master_order.shipment_date<=@to

there are 2 Where clauses used on main Query.

The problem is that you have 2 WHERE clauses in the main query. as master_order is a table used in main query, just replace 2nd WHERE with AND as below.

SELECT DISTINCT dbo.master_order.order_no,
                dbo.master_order.program_no,
                dbo.Setup_size.size_name,
                dbo.Setup_color.color_name,
                dbo.Setup_color.color_no,
                dbo.transaction_production.total_weight,
                dbo.Setup_yarn.yarn_count,
                dbo.Setup_article_order.article_name,
                dbo.master_order.shipment_date,
                @from AS reprt,
                @to AS reprt1,
                dbo.transaction_order.quantity,
                dbo.transaction_order.gsm
FROM dbo.master_order
INNER JOIN dbo.transaction_order ON dbo.master_order.order_id = dbo.transaction_order.order_id
INNER JOIN dbo.transaction_production ON dbo.transaction_order.trans_id = dbo.transaction_production.trans_id
INNER JOIN dbo.Setup_size ON dbo.transaction_order.size_id = dbo.Setup_size.size_id
INNER JOIN dbo.Setup_yarn ON dbo.transaction_order.yarn_id = dbo.Setup_yarn.yarn_id
INNER JOIN dbo.Setup_article_order ON dbo.transaction_order.article_id = dbo.Setup_article_order.article_id
INNER JOIN dbo.Setup_color ON dbo.transaction_order.color_id = dbo.Setup_color.color_id
AND dbo.Setup_yarn.color_id = dbo.Setup_color.color_id
WHERE dbo.setup_color.color_id=
    (SELECT color_no
     FROM dbo.setup_color)
  AND master_order.shipment_date>=@from
  AND master_order.shipment_date<=@to

Also if the table dbo.setup_color has more than 1 value, either use IN instead of = or add a WHERE clause to the inner query to return just one value, otherwise it will throw error.

use in instead of equals for a subquery.

SELECT DISTINCT 
dbo.master_order.order_no, 
dbo.master_order.program_no, 
dbo.Setup_size.size_name, 
dbo.Setup_color.color_name, 
dbo.Setup_color.color_no, 
dbo.transaction_production.total_weight, 
dbo.Setup_yarn.yarn_count, 
dbo.Setup_article_order.article_name, 
dbo.master_order.shipment_date, 
@from as reprt,
@to as reprt1, 
dbo.transaction_order.quantity, 
dbo.transaction_order.gsm 

FROM dbo.master_order 
INNER JOIN dbo.transaction_order ON dbo.master_order.order_id = dbo.transaction_order.order_id 
INNER JOIN dbo.transaction_production ON dbo.transaction_order.trans_id = dbo.transaction_production.trans_id 
INNER JOIN dbo.Setup_size ON dbo.transaction_order.size_id = dbo.Setup_size.size_id 
INNER JOIN dbo.Setup_yarn ON dbo.transaction_order.yarn_id = dbo.Setup_yarn.yarn_id 
INNER JOIN dbo.Setup_article_order ON dbo.transaction_order.article_id = dbo.Setup_article_order.article_id 
INNER JOIN dbo.Setup_color ON dbo.transaction_order.color_id = dbo.Setup_color.color_id
 AND dbo.Setup_yarn.color_id = dbo.Setup_color.color_id where dbo.setup_color.color_id in
 (select color_no from dbo.setup_color) where master_order.shipment_date >= @from and master_order.shipment_date<= @to

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM