我正在尝试编写一个嵌套查询,其中还包括将字符串组合在一起(一个可变的 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 )%";
都没用。
你可以用一个连接和一个
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')
)