我有一个名为product的表,其中包含name(nvarchar 1000),
P1
P2
P3
P4
我有一个名为accnt_test的帐户表,其中包含product_name。
id name
A1 P1;;p2;;p3;;p4
A2 P1;;p2
A3 P1;;p2;;p3
A4 P1;;p2;;p3;;p4
A5 P1
我必须从帐户表中选择那些包含产品表中所有产品的帐户。
所以我的输出应该是这样的:
id name
A1 P1;;p2;;p3;;p4
A4 P1;;p2;;p3;;p4
因为这两个帐户包含产品表中的所有产品。
我在SQL Server中编写了一个查询,但它无法正常工作。
这是查询:
SELECT *
FROM accnt_test ACC
WHERE ACC.product_name IN
(SELECT VM.product_name
FROM (SELECT A.*, P.NAME
FROM accnt_test A, product P
WHERE A.product_name LIKE
CONCAT('%', CONCAT(P.NAME, '%'))) VM
GROUP BY VM.product_name
HAVING COUNT(*) = (SELECT COUNT(DISTINCT NAME) FROM PRODUCT));
那么如何在concat的情况下使用它。
但是SQL Server显示错误:
sg 195, Level 15, State 10, Line 9
'CONCAT' is not a recognized built-in function name.
Msg 102, Level 15, State 1, Line 11
Incorrect syntax near ')'.
答案 0 :(得分:1)
CONCAT是SQL Server 2012的新功能。它不是早期版本的功能,包括2008 R2。
使用'fn concat'
select {fn concat('%', {fn concat('String', '%')})}
这是带有'fn concat'的代码。它会起作用。
SELECT *
FROM accnt_test ACC
WHERE ACC.product_name IN
(SELECT VM.product_name
FROM (SELECT A.*, P.NAME
FROM accnt_test A, product P
WHERE A.product_name LIKE
{fn concat('%', {fn concat(P.NAME, '%')})}) VM
GROUP BY VM.product_name
HAVING COUNT(*) = (SELECT COUNT(DISTINCT NAME) FROM PRODUCT));
答案 1 :(得分:1)
您的代码中包含太多错误。根据MySQL,SQL SERVER 2008R2或以前版本中没有内置concat
函数。尝试更改您的查询:
SELECT *
FROM accnt_test ACC
WHERE ACC.product_name IN (SELECT A.product_name
FROM accnt_test A,
product P
WHERE A.product_name LIKE '%' + P.NAME + '%')
GROUP BY product_name
HAVING Count(*) = (SELECT Count(DISTINCT NAME)
FROM PRODUCT)