给定数据库中的下表
CREATE TABLE users (
id SERIAL NOT NULL,
name VARCHAR,
PRIMARY KEY (id)
)
CREATE TABLE phones (
id SERIAL NOT NULL,
user_id INTEGER,
phone VARCHAR,
PRIMARY KEY (id),
FOREIGN KEY(user_id) REFERENCES users (id)
)
CREATE TABLE emails (
id SERIAL NOT NULL,
user_id INTEGER,
email VARCHAR,
PRIMARY KEY (id),
FOREIGN KEY(user_id) REFERENCES users (id)
)
我想知道每个用户有多少电子邮件和电话号码。
以下查询有效:
SELECT
users.id AS id,
users.name AS name,
(
SELECT COUNT(*)
FROM emails WHERE emails.user_id = users.id
) AS email_count,
(
SELECT COUNT(*)
FROM phones WHERE phones.user_id = users.id
) AS phone_count
FROM users;
但是当 SQLAlchemy 生成这样的查询时:
SELECT
users.id,
users.name,
email_count.count_1,
phone_count.count_2
FROM
users,
(
SELECT count(*) AS count_1
FROM emails, users
WHERE emails.user_id = users.id
) AS email_count,
(
SELECT count(*) AS count_2
FROM phones, users
WHERE phones.user_id = users.id
) AS phone_count
我尝试使用 GROUP BY 并加入他们,但由于某些用户没有电子邮件和电话,因此他们被排除在外,而且我不喜欢 OUTER JOIN 中的 NULL。