2017-07-07 176 views
-1

我有3个表:firearms_firearmbook,inventory_inventory和inventory_inventorytransaction。如果孩子有记录,选择父母和子女

,我有2例:

  1. 如果inventory_inventory表中有16项行动,显示inventory_inventory记录

  2. 如果inventory_inventory表中有16项行动inventory_inventorytransaction没有inventory_inventorytransaction,显示inventory_inventory和inventory_inventorytransaction.item_action_id

查询波纹管适用于第一个原因,但它不适用于第二个原因。 它应该显示水木清华这样的:

----------------------------------- 
| id | serial | action_id | 
----------------------------------- 
    1   MAGUM   
    2   EAGLE   
    2   EAGLE   16 

查询:

SELECT FB.id, INV.serial_number, INV.id, INVT.item_action_id FROM firearms_firearmbook AS FB 
LEFT JOIN inventory_inventory AS INV ON INV.id = FB.item_id 
LEFT JOIN inventory_inventorytransaction AS INVT ON INVT.item_id = INV.id AND INVT.item_action_id = 16 
WHERE FB.store_id = 1 
+0

@GordonLinoff完全missclicked MySQL的,谢谢:) – user3334406

+0

我没有看到在所需的输出产生第二个记录的要求。 – trincot

+0

@trincot我需要它,因为他们希望看到对该项目所做的每个更改,以及项目本身。如果物品没有变化,则计数为1,如果物品有变化,则计为2 – user3334406

回答

1

看来,如果有某个商品的行为16条,需要两个记录输出:一个在第三的空栏,另一个是在第三列16。

在这种情况下,你可以这样做:

with base as (
     select  fb.id, 
        inv.serial_number, 
        inv.id, 
     from  firearms_firearmbook as fb 
     inner join inventory_inventory as inv 
       on inv.id = fb.item_id 
     where  fb.store_id = 1 
    ) 
select  base.*, 
      invt.item_action_id 
from  base 
inner join inventory_inventorytransaction as invt 
     on invt.item_id = base.id 
     and invt.item_action_id = 16 
union all 
select  base.*, 
      null 
from  base 
order by 1, 2, 3, 4 desc 
0

您好我觉得这是你以后有什么。

我为您描述的两种情况做了CASE声明。我不确定你想要什么列2)当你说“inventory_inventory”,所以我把id列,你可以改变它的另一列。

我也删除了INVT.item_action_id = 16的inventory_inventorytransaction连接的一部分,因为我不认为这是必要的,因为它在CASE语句中处理。

SELECT 
FB.id, 
INV.serial_number, 
INV.id, 
INVT.item_action_id, 
CASE 
    WHEN INVT.item_action_id = 16 THEN CAST(INV.id as VARCHAR) + ' ' + CAST(INVT.item_action_id as VARCHAR) -- This is Case 2 
    ELSE INV.record -- This is Case 1 
END as answer 
FROM firearms_firearmbook AS FB 
LEFT JOIN inventory_inventory AS INV ON INV.id = FB.item_id 
LEFT JOIN inventory_inventorytransaction AS INVT ON INVT.item_id = INV.id -- Removed JOIN on INVT.item_action_id = 16 and moved it to CASE 
WHERE FB.store_id = 1; 
相关问题