两个表之间的查询? [关闭]

Posted

技术标签:

【中文标题】两个表之间的查询? [关闭]【英文标题】:Query between two tables? [closed] 【发布时间】:2016-03-05 10:28:11 【问题描述】:

我有一个问题要问你。我认为这很容易解决,但我非常关注这一点。

我有两张桌子,一张是产品,另一张是收藏夹。收藏夹表有 2 个字段,id_userid_product

现在,我想查询所有收藏的产品并将它们显示在我的网页上。我想我必须对我的查询做一个join,但现在我真的迷路了。

例如我想显示所有来自id = 3的用户最喜欢的产品,我应该怎么做?

【问题讨论】:

你能搞定表格布局吗? 子查询或连接。子查询示例:SELECT * FROM products WHERE id IN(SELECT id_product FROM favourites WHERE id_user = 3) 【参考方案1】:

您可以使用 INNER JOIN。

如果您按照下面的示例进行操作,您就会明白这一点。我不知道您的 Products 表中有什么。根据您的描述,您似乎会使用用户 ID 加入。

USE AdventureWorks;
GO
/*
Create a Join on 2 tables to show information from both. The example tables are from the AdventureWorks database:
    Production.Product
    Production.ProductInventory

In this example we'll look to get the Product ID and Name from the Product table and the inventory quantity, shelf, and bin from the     ProductInventory table.
*/

SELECT
/* Precede each column you want to select with the identifier of which table it's coming from */
    prod.ProductID,
    prod.Name,
    inv.Shelf,
    inv.Bin,
    inv.Quantity

/* Select items from the Product Table */
FROM Production.Product AS prod 

/* Use an INNER JOIN to get the items related to the Product table that are in the ProductInventory table based on the ProductID */
INNER JOIN Production.ProductInventory AS inv ON
    prod.ProductID = inv.ProductID

【讨论】:

【参考方案2】:

您需要对您的“收藏夹”表进行主要查询并加入产品表,因此假设您的 id_product 字段指向产品表中的 id 字段:

SELECT fav.*, prod.* FROM favourites fav RIGHT JOIN products prod ON prod.id = fav.id

请注意,我在这里使用 RIGHT JOIN 是因为您要确保右侧表(在本例中为收藏夹)具有要检索的信息(否则,如果 id_product 指向不存在的 id,您将获得 NULL 结果)。另请注意,我为每个表指定了一个别名(分别为 favprod),因为这使查询更容易/更快地编写。

希望这会有所帮助!

【讨论】:

【参考方案3】:

您正在寻找这样的带有联接的查询。

select a.* from favourites as a join products as b on a.id_product= b.id

【讨论】:

也许这是解决方案,但我想获取产品信息,所以会是这样,不是吗? select b.* from products b join favourites a on a.id_product = b.id 是的,这就是您的查询应该是这样的......所以您将根据产品 ID 获得每个最喜欢的产品..done【参考方案4】:

为了将来参考,在 Stack 上提问时,您需要包含所有相关信息。比如你的数据库布局。我们不是读心术者,不过这里只是猜测。

Select * from Favorites junk
Left join Products poop on
poop.id = junk.id_product
Left join Users stuff on
stuff.id = junk.id_user

【讨论】:

以上是关于两个表之间的查询? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

mysql中两个大表之间的连接查询

SQL查询从具有相同列“名称”的其他两个表中获取具有不同值的单列“名称”[关闭]

Oracle SQL 更新基于两个表之间的子查询

使用 sequelize 通过相同两个表之间的单独联结表进行查询

两个表之间的查询慢

寻找两个表/查询之间的双左连接的改进