【问题标题】:SQL join 3 tables with empty record when no info没有信息时,SQL连接3个空记录表
【发布时间】:2014-04-26 01:22:43
【问题描述】:

我很难理解我想要达到的目标:S - 对不起我的英语

我有一个带有位置历史 ID 的产品表 我有一个包含位置 ID 和上次转移日期的历史记录表 我有一个带有位置名称的位置表

表格:

**site_product**
product_id
product_name

**site_trans**
trans_id
trans_product - link the product
trans_inventory - for the location
trans_date2 - date when it was assigned

**site_location**
location_id
location_name

我使用 PHP 构建了一个表来收集它正在工作的所有信息,并且我将所有列排序为位置的一部分。

这是我的工作版本,但没有位置名称...(如果有帮助的话)

SELECT * FROM site_trans WHERE trans_product=product_id (e.g. 659) ORDER BY trans_date2 DESC 限制 1

它给出了位置 ID 号,但我想更进一步并获得位置名称,见上文。如果有一个,它什么也不做,所以离开。

问题:

如何将位置链接到此以使其工作?请。

有人可以说明我如何在其中进行选择吗?

(我在很多方面都是初学者,所以即使是讲座也会很感激)

更新1: LIMIT 1 是为最后一个位置设计的

【问题讨论】:

  • LEFT OUTER JOIN 怎么样?
  • @Latheesan Kanes 与 mysql 中的 left join 不完全相同? stackoverflow.com/a/2809609/520857
  • 首先你应该删除 LIMIT 1 以获得更多结果
  • 您好,谢谢,很遗憾没用,我只得到了一张唱片
  • fiddle 与您的架构和几行将有很大帮助。

标签: mysql sql


【解决方案1】:

兄弟,当您输入“LIMIT 1”时,您是说您只需要 1 条记录,因此 sgbd 将只检索 1 行。

您还应该查看所有类型的连接:http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

也许使用左连接可能会丢失一些数据。

【讨论】:

  • 我已经改写了我的问题,看看是否更有意义。感谢您的帮助。
  • SELECT trans.*, loc.* FROM site_trans as trans, site_location as loc WHERE loc.location_id = trans.trans_inventory; -- 如果我理解你想要什么,并且如果 trans_inventory 引用 location_id,这将起作用。
【解决方案2】:
SELECT s.*, sl.location_name
FROM site_trans AS s
LEFT JOIN site_location AS sl ON sl.location_id = s.location_id
WHERE s.trans_product=646 
ORDER BY s.trans_date2 DESC 
Limit 1

我得到了一些帮助,这里是解决方案。谢谢大家。很棒的团队

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    相关资源
    最近更新 更多