带组合字符串的嵌套查询

问题描述 投票:0回答:1

我正在尝试编写一个嵌套查询,其中还包括将字符串组合在一起(一个可变的 2 字母字符串和一个固定的 6 字母字符串“-EXTRA”)。

姓名 部门
蒂姆 AA
弗雷德 BB

库存

部分 商店 数量
项目1 AA 3
项目2 AA-额外 6
项目1 BB 2
项目2 BB-EXTRA 1

我想写一个查询,看看现在谁在使用系统,并返回隶属于他们部门的零件库存。例如,如果 Fred 当前已登录,他应该只能看到:

部分 商店 数量
项目1 BB 2
项目2 BB-EXTRA 1

这些是我到目前为止的尝试。 (USER 查看当前登录的用户。这不是问题,它适用于其他查询。)

SELECT *
FROM Stock
WHERE Store IN CONCAT(( SELECT Department FROM Person WHERE Name = USER ), '-EXTRA')
UNION
SELECT *
FROM Stock
WHERE Store IN ( SELECT Department FROM Person WHERE Name = USER );
SELECT *
FROM Stock
WHERE Store LIKE "( SELECT Department FROM Person WHERE Name = USER )%";

都没用。

sql subquery inner-join
1个回答
0
投票

你可以用一个连接和一个

in
谓词来做到这一点:

select s.*
from stock s
inner join person p on s.store in (p.department, concat(p.department, '-EXTRA'))
where p.name = 'Fred'

这允许用户在商店名称与他们部门的名称匹配时查看股票(可能带有字符串前缀

'-EXTRA'
)。

exists
也想到:

select s.*
from stock s
where exists (
    select 1 
    from person p
    where p.name = 'Fred' 
        and s.store in (p.department, concat(p.department, '-EXTRA')
)
© www.soinside.com 2019 - 2024. All rights reserved.