sql多值表搜索查询

jrcvhitl  于 2021-07-29  发布在  Java
关注(0)|答案(0)|浏览(215)

我正在尝试创建一个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: )

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题