[英]LINQ get rows from a table that don't exist in another table when using group by?
[英]SQL Server Query: Get a List of Columns Which Don't Exist in Another Table's Field
我只需要从SPLANNING_ROOMDATA2表中选择所有列名称 ,这样这些名称就不应存在于另一个表中以逗号分隔的列名称列表中。 这是我在C#ASP.NET应用程序中的查询。 我的查询生成一个错误,例如“ syntax error near Where
的syntax error near Where
”。
SqlCommand cmd = new SqlCommand("select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='Splanning_RoomData2' where COLUMN_NAME NOT IN (SELECT ATTRIBUTENAME FROM SPLANNING_RESTRICTED_ATTRIBUTES)", con);//get only column names
注意,如果我删除第二个Where
子句,那么我会得到一个列列表,但这不是我想要的。 我进行了一些搜索,但没有一个满足我的需求。
***编辑:截至目前,所有答案均无效。 我将尝试更改splanning_restricted_attributes表,以允许每行分配一个限制属性,而不是用逗号分隔一个限制属性。 谢谢大家 **
您不应该将列表存储为逗号分隔的值。 它们应位于单独的表中,称为联结表,每列和表每行一行。
但是,有时您会陷入这种结构。 这是一种获取所需内容的方法:
select c.COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS c LEFT JOIN
SPLANNING_RESTRICTED_ATTRIBUTES ra
ON ',' + lower(ra.ATTRIBUTENAME) + ',' LIKE '%,' + lower(c.column_name) + ',%'
where TABLE_NAME = 'Splanning_RoomData2' and ra.ATTRIBUTENAME is null;
两次使用AND而不是WHERE
SqlCommand cmd = new SqlCommand("SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='Splanning_RoomData2'
AND COLUMN_NAME NOT IN (SELECT ATTRIBUTENAME
FROM SPLANNING_RESTRICTED_ATTRIBUTES)", con);
我只是发布@Gordon Linoff答案的更新答案,尝试将查询作为,
select c.COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS c JOIN
SPLANNING_RESTRICTED_ATTRIBUTES ra
ON ',' + lower(ra.ATTRIBUTENAME) + ',' NOT LIKE '%,' + lower(c.column_name) + ',%'
where c.TABLE_NAME = 'Splanning_RoomData2';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.