我对在选择语句中使用案例相当陌生,所以我需要一些帮助。
我有两张桌子。让我们调用一个res和一个ser (用于资源和串行)。
res contains a field id & bar_code_id
ser contains a field id & container_id and they join on the id obv.无论如何,我需要做的是找出如何列出每个container_id的条形码_id等于一个特定的条形码_id的res.id字段的所有条码_id。
例如:
我有bar_code_id的集装箱是123456。它是一个容器,它的"container_id“是空的,因为它不能放在容器中。容器中有几个项目,但是,找到项目的唯一方法是找到每一个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部件时使用.
不管怎么说,我希望这一切都很清楚。如果有什么让我困惑的话,请告诉我&我很感谢您的帮助。
编辑:这是我最后做的工作,如果将来有人需要这个的话
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发布于 2015-01-07 18:56:59
首先,您必须声明要使用的变量,看看这个答案。然后看看这里的在mySQL中构建案例语句
PD:如果123456是一个数字,不要用‘都不’来声明变体。(至少在mySQL 'n PostgreSQL中)
发布于 2015-01-07 19:06:15
让我首先澄清一下你的"bar_code_id“。这些都是从“区域”表..。那将是一个简单的
从res r中选择r.id,r.bar_code_id,其中r.bar_code_id = 123456
现在,你想要任何与这些容器相关的序列号.添加一个联接(即:必须存在于Ser表中)或一个左联接(无论SER表中是否匹配,都要显示ID )
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如果您更改为“左联接”,那么将返回所有限定的"res“记录,container_id列将为NULL (即:没有匹配)。按照现在的方式,它只显示两个表中匹配的表。
联接是根据您的示例选择您试图描述的SER列Container_ID是RES列ID的联接基础。
https://stackoverflow.com/questions/27826531
复制相似问题