我应该在哪里放置DISTINCT?

时间:2019-08-29 08:46:38

标签: sql sql-server

我试图在这个小小的复杂查询中仅获取多个重复项的唯一结果:

$sql = "SELECT t1.*, t2.floor_id
        FROM dbo.IMP_ELEMENT AS t1
        INNER JOIN dbo.IMP_MODEL_GEOMETRY t2 ON CONCAT(t1.Project, '_', t1.element_mark) = CONCAT(t2.Project, '_', t2.element_mark)
        WHERE CONCAT(t2.Project, '-', t2.floor_id) LIKE '%$objNr%'";

我希望只会收到来自t2.element_mark的唯一结果。
那我应该放在DISTINCT的什么位置?还是有另一种方法可以做到这一点?

在t1中,Element_mark是唯一的,但是在t2中,Element_mark可以重复。

所以从t1开始,我喜欢接收所有数据。但是从t2开始,我想要DISTINCT element_mark。从t2开始,我只显示floor_id,但是我需要使用Element_mark和Project来匹配t1和t2行。

编辑
我显示的t2.element_mark中的重复项无关紧要。 t2.floor_id在所有重复项上都相同。

**

t1
----------------------------------------------
id    project    element_mark     type     ...
0     1          1                A        ...
1     1          2                A        ...
2     1          3                A        ...

t2
----------------------------------------------
id    project    element_mark    flood_id    ...
0     1          1               1           ...
1     1          1               1           ...
2     1          2               1           ...
3     1          3               2           ...

从t1中可以看出,所有element_mark都是唯一的。但是在t2中,element_mark可以看到两次或更多次。 我想要的是从t1中选择*。 我想从t2 WHERE CONCAT(t1.project,'_',t1.element_mark)= CONCAT(t2.project,'_',t2.element_mark)中选择DISTINCT element_mark,floor_id

2 个答案:

答案 0 :(得分:2)

尝试使用子查询,如下所示

SELECT  t1.*, t2.floor_id
        FROM dbo.IMP_ELEMENT AS t1
        INNER JOIN (select distinct project,element_mark,flood_id from dbo.IMP_MODEL_GEOMETRY) t2 ON CONCAT(t1.Project, '_', t1.element_mark) = CONCAT(t2.Project, '_', t2.element_mark)
        WHERE CONCAT(t2.Project, '-', t2.floor_id) LIKE '%$objNr%'

答案 1 :(得分:0)

如您所说

  

t2.floor_id在所有重复项上都相同。

然后您的查询就可以了,您可以在选择中添加DISTINCT

$sql = "SELECT DISTINCT t1.*, t2.floor_id
        FROM dbo.IMP_ELEMENT AS t1
        INNER JOIN dbo.IMP_MODEL_GEOMETRY t2 ON CONCAT(t1.Project, '_', t1.element_mark) = CONCAT(t2.Project, '_', t2.element_mark)
        WHERE CONCAT(t2.Project, '-', t2.floor_id) LIKE '%$objNr%'";

更新:

您的查询返回

----------------------------------------------
id    project    element_mark     type     flood_id
0     1          1                A        1
0     1          1                A        1
1     1          2                A        1
2     1          3                A        2

添加独特的回报

----------------------------------------------
id    project    element_mark     type     flood_id
0     1          1                A        1
1     1          2                A        1
2     1          3                A        2