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