1
考慮到下表中的數據庫如何在SELECT X FROM ...中使用SQLAlchemy中的位置X中的子查詢?
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。
謝謝,它的工作原理,但是......不完美。也許你想添加DISTINCT到COUNT。但是如果表格沒有唯一的約束呢?如果我只有一個數,我會用這個。 –