我在选择语句中使用案例相当新,所以我需要一些帮助。
我有两张桌子。让我们调用一个res和一个ser(用于资源和序列)。
res contains a field id & bar_code_id
ser contains a field id & container_id and they join on the id obv.
无论如何,我需要做的是弄清楚如何列出每个项目的所有bar_code_id,其中container_id等于特定的bar_code_id的res.id字段。
例如:
我有bar_code_id的容器是123456.它是一个容器,它的“container_id”为null,因为它不能放在容器中。容器里面有几个项目,但是,我找到项目的唯一方法是找到每个项目,其中container_id与123456的res.id相同
我不确定如何用案例陈述解决这个问题。我尝试了以下几点:
select case
when res.bar_code_id is '123456'
then (select res.bar_code_id from res
left outer join ser on ser.id = res.id
where ser.container_id = <somehow the variable of 123456's res.id?>) end
from res
但我知道我已经离开了。我不确定如何将res.id存储为变量,以便稍后在ser.container_id = res.id部分的比较中使用...
无论如何,我希望这一切都相当清楚。如果有任何混淆让我知道&amp;我很感激帮助。
编辑:如果有人在将来需要这个,那么这就是我最终做的工作
set @barcode := 123456;
set @id := (select res.id from res where res.bar_code_id = @barcode);
select res.id, resource_name, res.bar_code_id, container_id from res
left outer join ser
on ser.item_id = res.id
where container_id = @id
答案 0 :(得分:0)
首先,您必须声明要使用的变量check out this answer。 然后看看build CASE statements in mySQL
PD:如果123456是一个号码,请不要使用&#39;不是&#34;申报可变数。 (至少在mySQL&#39; n PostgreSQL中)
答案 1 :(得分:0)
首先让我开始澄清你的&#34; bar_code_id&#34;。这些仅来自&#34; RES&#34; table ...那将是一个简单的
选择 r.id, r.bar_code_id 从 res r 哪里 r.bar_code_id = 123456
现在,您需要与这些容器关联的任何序列号...添加JOIN(即:必须存在于Ser表中)或LEFT JOIN(如果SER表中的匹配则显示ID REGARDLESS)
select
r.id,
r.bar_code_id,
s.container_id
from
res r
JOIN ser s
on r.id = s.container_id
where
r.bar_code_id = 123456
如果您更改为&#34; LEFT JOIN&#34;,则所有符合条件的&#34; res&#34;将返回记录,而container_id列将为NULL(即:没有匹配)。它现在的方式,它只会显示那些在BOTH表中匹配的那些。
根据您的样本选择,您尝试描述SER的列Container_ID是RES的列ID的连接基础。