mysql - MySQL 和 POSTGRESQL 的通用查询

标签 mysql postgresql

我想创建一个适用于 MySQL 和 PostgreSQL 的通用查询。

对于这个查询,我需要选择 3 个表中的所有列,但结果需要在 ID 上有一个不同的子句以消除重复的行。 实际上数据库中有6条记录,但只有3条不同: 其中一个出现 3 次,另一个出现 2 次,最后一个刚刚出现。 多次出现的记录都是完全相同的,我只想各保留一条。

这是6条记录的图片: 6 records

而我,我想要的是: Just distinct record

这是 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/

相关文章:

sql - postgres 加入最大日期

node.js - 如何在 express 框架中使用 d3.js 代码

php - MySQL fatal error

php - PDO 的行数

mysql - SQL查询按缺失部分排序所有施工计划

php - PDO lastInsertID() 由于在一次调用中运行多个查询而失败

sql - Postgres 9.4 : Include sibling column in each jsonb array result

MySQL避免select语句的数据重复

hibernate - 由: java. lang.NoSuchMethodError : org. postgresql.core.BaseConnection.getEncoding()Lorg/postgresql/core/Encoding引起;

java - 如何使用 Hibernate for PostgreSQL 创建索引