我试图在这个小小的复杂查询中仅获取多个重复项的唯一结果:
$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
答案 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