基于连接表从两个表中获取数据

gdx19jrr  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(340)

我有以下三张表:

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

我要做的是使用join语句获取信息。到目前为止我得到的是:

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 条款。那部分应该是什么样子?

6l7fqoea

6l7fqoea1#

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

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 = ?

注意使用 ? . 这是一个参数占位符。如果从应用程序调用查询,则应将值作为参数传入,而不是使用查询字符串。
还要注意表别名的使用,它使查询更易于编写和读取。

pwuypxnk

pwuypxnk2#

考虑使用简单联接:

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 join` 这里似乎不需要。而且,不需要将连接嵌套在括号内(这只会降低查询的可读性,没有任何好处)。最后,表别名(这里, `pe` ,  `o` 以及 `pu` )使查询更简短,更易于编写和读取。

相关问题