MySQL和PGSQL的通用查询

时间:2016-07-27 08:35:07

标签: mysql postgresql

我想创建一个与MySQL和PostgreSQL一起使用的通用查询。

对于此查询,我需要选择3个表中的所有列,但结果需要在ID上有一个distinct子句以消除重复行。 实际上在数据库中,有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一起使用的查询

1 个答案:

答案 0 :(得分:1)

首先尝试获取第一个表的不同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"