gpt4 book ai didi

mysql - 使用另一个表的子结果进行查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:00 25 4
gpt4 key购买 nike

我有以下两个数据库表:

`membership_members` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` tinytext NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`)
)

`membership_payments` (
`date` date NOT NULL,
`amount` int(11) NOT NULL,
`member` int(11) NOT NULL,
KEY `member` (`member`)
)

我想列出所有成员,并且我想为每个成员显示该成员的所有付款 list 。 membership_payments.member 列是一个外键 membership_members.id(这是 MySQL,所以我不能明确指定外键)。请注意,我确实想列出一个成员,即使他没有任何付款。

所以像这样:

* John Smith
- 2012-05-06 $100
- 2012-01-02 $100
* Brian Jones

* Mike Jackson
- 2012-09-02 $50

我试过这个查询:

SELECT id, name, active, date, amount
FROM `membership_members`,
`membership_payments`
WHERE membership_members.id = member

这当然为我提供了我需要的数据,但并不完全是我需要的数据,因为它会为每次付款返回一行。这意味着我以后必须按成员 ID 对行(在 PHP 中)进行分组,这样我就不会多次列出一个成员。我可以做到这一点,但我相信用 SQL 来做会更容易、更快。此外,此查询仅向我提供使用其 ID 付款的用户。

我觉得这应该很简单,但上次我在 6-7 年前做了 SQL 中最简单的东西。

编辑:一个答案中建议的 LEFT OUTER JOIN 解决了“缺失”成员的问题。但按成员 ID 对结果进行分组的最佳方式是什么?我知道有一个 GROUP BY 子句,但它并没有给我给定成员的所有付款,只有一个。我想我可以为每个成员运行一个新的付款查询,但我担心这会非常低效(我们有大约 300-400 个成员)。

最佳答案

您需要根据引用键列JOIN这两个表。

SELECT id, name, active, date, amount
FROM membership_members
LEFT OUTER JOIN membership_payments
ON membership_members.id = membership_payments.member;

我选择了 LEFT OUTER JOIN 以便还显示没有付款的成员。

有关联接的更多信息,请查看 http://dev.mysql.com/doc/refman/5.0/en/join.html

编辑

使用 ORDER BY membership_members.id 获取按特定列排序的记录。分组的行为不像排序。 GROUPING 按您提供的列合并 所有记录。 ORDER BY 排序

关于mysql - 使用另一个表的子结果进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15897596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com