从另一个表中选择带有主键的数据?

Posted

技术标签:

【中文标题】从另一个表中选择带有主键的数据?【英文标题】:SELECT data with primary keys from another table? 【发布时间】:2013-04-20 22:42:26 【问题描述】:

我有一个“users”表、一个“offers”表和一个带有 userID 和 offerID 的联结“*users_offers*”。

如何从属于特定用户的优惠中选择每个优惠?

我可以实现一个解决方案(如下),它实际上从联结表中开始选择数据,然后简单地连接报价列,但结果也包含联结列。

SELECT * 
FROM users_offers INNER JOIN offers ON users_offers.offerID = offers.ID 
WHERE userID = 1

是否有任何解决方案以优惠开始选择?

【问题讨论】:

不要选择 *,只选择您需要的列。 【参考方案1】:

使用SQL Alias:

SELECT o.* 
FROM users_offers AS uo
INNER JOIN offers AS o ON uo.offerID = o.ID 
WHERE uo.userID = 1

说明:

FROM users_offers AS uo 设置一个名为“uo”的新别名,指向 [users_offers] 表。 offers AS o 也是如此。这些别名可用于 SQL 语句的其他部分。

【讨论】:

哇,谢谢。其实我可以省略 users_offers 别名,只有 'o' 似乎就足够了。 是的,你可以,但我通常为所有用于使将来更改更容易的表设置别名。但这是一个品味问题。 我只是处于复杂性的早期阶段,所以像这样的考虑现在对我来说感觉开销很大。再次感谢,省去了我几个小时的谷歌搜索。 :D【参考方案2】:
SELECT offers_alias.*
FROM users_offers
INNER JOIN offers AS offers_alias ON users_offers.offerID = offers_alias.ID 
WHERE users_offers.userID = 1

【讨论】:

以上是关于从另一个表中选择带有主键的数据?的主要内容,如果未能解决你的问题,请参考以下文章

SQL:选择另一个表中没有复合主键的条目

如何从没有数字主键的表中有效地选择随机行

数据库表中主键的设置

根据带有参数的选择(唯一键)从另一个表中插入值

如何从表中选择主键列?

Oracle 反向主键