MySQL案例选择

时间:2015-01-07 18:50:38

标签: mysql

我在选择语句中使用案例相当新,所以我需要一些帮助。

我有两张桌子。让我们调用一个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

2 个答案:

答案 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的连接基础。