【问题标题】:Get data from 2 tables based on a junction table基于联结表从 2 个表中获取数据
【发布时间】:2020-11-22 02:45:57
【问题描述】:

我有以下 3 个表:

1. offers                     2. producers                3. products

ProducerID | ProductID        ProducerID | ProducerName   ProductID | ProductName
-----------|----------        -----------|-------------   ----------|------------
1          |    1                  1     | John                1    | Wood
1          |    2                  2     | Bill                     | Metal
2          |    1                        

我想要做的是使用连接语句获取信息。到目前为止,这是我所得到的:

SELECT producers.ProducerName, products.ProductName
FROM offers
(RIGHT JOIN producers
ON offers.ProducerID = producers.ProducerID
RIGHT JOIN products
ON offers.ProductID = products.ProductID)
WHERE ProductName=${ProductName}

我正在努力解决的是 WHERE 语句。我希望用户输入他们正在搜索的ProductName,将其转换为ProductID,然后在WHERE 子句中进行比较。那部分应该是什么样子?

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。您似乎也在从应用程序调用 SQL,因此您也应该为此添加一个标签。

标签: javascript sql sqlite join


【解决方案1】:

您不应该需要外部连接。所以只需使用:

select pr.ProducerName, p.ProductName
from offers o join
     producers pr
     on o.ProducerID = p.ProducerID join
     products p
     on o.ProductID = p.ProductID
where p.ProductName = ?

注意? 的使用。这是一个参数占位符。如果您从应用程序调用查询,您应该将值作为参数传递,而不是修改查询字符串。

还要注意表别名的使用,这使查询更易于编写和阅读。

【讨论】:

    【解决方案2】:

    考虑使用简单连接:

    select pe.producerName, pu.productName
    from producers pe
    inner join offers o on o.producerID = pe.producerID
    inner join products pu on pu.productID = o.productID
    where pu.producerName = ?
    

    right joins 这里似乎不需要。此外,不需要将连接嵌套在括号内(这只会降低查询的可读性,没有任何好处)。最后,表别名(此处为peopu)使查询更短,更易于编写和阅读。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      相关资源
      最近更新 更多