我想创建一个适用于 MySQL 和 PostgreSQL 的通用查询。
对于这个查询,我需要选择 3 个表中的所有列,但结果需要在 ID 上有一个不同的子句以消除重复的行。 实际上数据库中有6条记录,但只有3条不同: 其中一个出现 3 次,另一个出现 2 次,最后一个刚刚出现。 多次出现的记录都是完全相同的,我只想各保留一条。
这是 MySQL 查询:
SELECT
*
FROM
table_1
INNER JOIN table_2
ON table_1.id = table_2.table_1_id
INNER JOIN table_3
ON table_2.table_3_id = table_3.id
WHERE
table_3.type = 'foo'
GROUP BY
table_1.id
这是 PostgreSQL 查询:
SELECT DISTINCT ON (table_1.id)
*
FROM
table_1
INNER JOIN table_2
ON table_1.id = table_2.table_1.id
INNER JOIN table_3
ON table_2.table_3_id = table_3.id
WHERE
table_3.type = 'foo'
我不知道如何创建一个适用于 MySQL 和 PostgreSQL 的查询
最佳答案
首先尝试获取第一个表的不同 ID,然后将其余表连接到它们。
不过,我猜你仍然会得到 table_1 的一些随机值,如果有多个具有不同值的 id 并且你没有指定你想要的值。
SELECT
table_1.*, table_2.*, table_3.*
FROM
(SELECT table_1.id FROM table_1 GROUP BY table_1.id) AS distinctIds
INNER JOIN table_1 ON table_1.id = distinctIds.id
INNER JOIN table_2 ON distinctIds.id = table_2.table_1_id
INNER JOIN table_3 ON table_2.table_3_id = table_3.id
WHERE
table_3.type = "foo"
关于mysql - MySQL 和 POSTGRESQL 的通用查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38607831/