我正在尝试创建一个sql数据库,其中包含关于平民的信息,比如表 men
包含以下行:
CREATE TABLE [dbo].[men](
[id] [int] NULL,
[name] [varchar](50) NULL
) ON [PRIMARY] GO
INSERT INTO [men] VALUES
(1, 'Cheif01'),
(2, 'Player01'),
(3, 'Artist02'),
(4, 'Artist03');
SELECT * FROM [men];
结果:men表格行的图像
还有一张table men_attr
要指定有关男性的某些属性,请使用以下行:
很明显,men表中的每一行都有不同的惟一属性,因此我为属性创建了一个单独的表。
CREATE TABLE [dbo].[men_attr](
[id] [int] NULL,
[man] [int] NULL,
[attr] [varchar](50) NULL,
[value] [varchar](50) NULL
) ON [PRIMARY] GO
INSERT INTO [men_attr] VALUES
(1, 1, 'galarriesNo', '2'),
(2, 1, 'type', 'brush artist'),
(3, 1, 'restaurant', 'subway'),
(4, 1, 'fifaNo', '555'),
(5, 1, 'club', 'FCB'),
(6, 1, 'galarriesNo', '2'),
(7, 1, 'galarriesNo', '5');
SELECT * FROM [men_attr];
结果:men\u attr表行的图像
现在,我需要通过一个动态的多属性变量来选择所有的男人,比如
declare @attrs XML = '<r>
<attr>
<name>galarriesNo</name>
<value>2</value>
</attr>
<attr>
<name>club</name>
<value>FCB</value>
</attr>
</r>';
我的问题:
我的数据集是正确的还是你可以建议我另一套(erd)?
如何基于@attr变量动态获取以下查询?
SELECT * FROM [men] WHERE (SELECT COUNT(id) FROM men_attr WHERE men_attr.man = men.id AND (
-- WHILE LOOP OTHER OR ANY METHOD START
-- EACH LINE OF THESE ARE GENERATED DYNAMICALLY
([attr] = 'galarriesNo' AND [value] = '2')
OR
([attr] = 'club' AND [value] = 'FCB')
-- WHILE LOOP OTHER OR ANY METHOD ENDS
)
) <= 1
要获得结果:
id name
-- -------
1 Artist01
3 Player01
4 Artist02
我以前的代码可以工作,但它是由静态代码生成的,我需要动态获取attr和值。
我的sql server version
是
SELECT @@VERSION;
------------------------------------------------
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.2 (Build 9200: )
暂无答案!
目前还没有任何答案,快来回答吧!