mysql子查询引用外部表

mysql子查询引用外部表,mysql,sql,subquery,Mysql,Sql,Subquery,我试图在子查询select中使用外部表。而我可以硬编码值并获得所需的结果;我真的需要使用外部phppos_items表;但是我想不出来。下面是简化的查询。有没有办法做到这一点?我之所以使用子查询,是因为我只想获取联接中的一行 我想得到的外部表格的部分是XXX 假设您想用phppos_items的主键(即item_id)替换XXX,那么您可能只需要在外部查询中为表添加别名,并通过子查询中的别名引用它。如果trans_items引用的不是主键,或者item_id不是主键,那么我需要更多信息来帮助 S

我试图在子查询select中使用外部表。而我可以硬编码值并获得所需的结果;我真的需要使用外部phppos_items表;但是我想不出来。下面是简化的查询。有没有办法做到这一点?我之所以使用子查询,是因为我只想获取联接中的一行

我想得到的外部表格的部分是XXX


假设您想用phppos_items的主键(即item_id)替换XXX,那么您可能只需要在外部查询中为表添加别名,并通过子查询中的别名引用它。如果trans_items引用的不是主键,或者item_id不是主键,那么我需要更多信息来帮助

SELECT SUM(trans_current_quantity) as quantity FROM `phppos_items` AS items1
LEFT JOIN `phppos_location_items` ON `phppos_location_items`.`item_id` = `phppos_items`.`item_id` and `phppos_location_items`.`location_id` IN(1)
LEFT JOIN 
    (SELECT * FROM phppos_inventory WHERE trans_date < '2018-05-06 23:59:59' and trans_items = items1.item_id ORDER BY trans_date DESC LIMIT 1) as inventory 
     ON `phppos_location_items`.`item_id` = `inventory`.`trans_items`

这是您的查询,表别名使其更具可读性:

SELECT SUM(trans_current_quantity) as quantity
FROM phppos_items i LEFT JOIN
     phppos_location_items li
     ON li.item_id = i.item_id and li.location_id IN (1) LEFT JOIN 
     (SELECT * 
      FROM phppos_inventory inv
      WHERE inv.trans_date < '2018-05-06 23:59:59' and
            trans_items = *XXX*
      ORDER BY trans_date DESC LIMIT 1
     ) inv 
    ON li.item_id = inv.trans_items;

我还通过添加第二个来修正日期比较。如果这不正确,您可以修复它,但查询更具可读性。

我得到错误1054-where子句中的未知列'items1.item\u id'您的意思是li.item\u id=I.item\u id吗?@chrismunch。子查询中的引用应该是inv2。
SELECT SUM(trans_current_quantity) as quantity
FROM phppos_items i LEFT JOIN
     phppos_location_items li
     ON li.item_id = i.item_id and li.location_id IN (1) LEFT JOIN 
     (SELECT * 
      FROM phppos_inventory inv
      WHERE inv.trans_date < '2018-05-06 23:59:59' and
            trans_items = *XXX*
      ORDER BY trans_date DESC LIMIT 1
     ) inv 
    ON li.item_id = inv.trans_items;
SELECT SUM(inv.trans_current_quantity) as quantity
FROM phppos_items i JOIN
     phppos_location_items li
     ON li.item_id = i.item_id and li.location_id IN (1) JOIN 
     phppos_inventory inv
     ON li.item_id = inv.trans_items
WHERE li.item_id = XXX AND
      inv.trans_date = (SELECT MAX(inv2.trans_date)
                        FROM phppos_inventory inv2
                        WHERE inv2.trans_date < '2018-05-07' and
                              inv2.trans_items = li.item_id
                       );