Sql 我应该把它放在哪里?

Sql 我应该把它放在哪里?,sql,sql-server,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(t

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

$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收到唯一的结果。 那么我应该把它放在哪里呢?还是有其他方法可以实现这一点

在t1中,元素_标记是唯一的,但在t2中,元素_标记可以有重复项

所以我喜欢从t1接收所有数据。但是从t2开始,我想要不同的元素。从t2开始,我只显示楼层id,但我需要使用元素标记和项目来匹配t1和t2行

编辑 在t2.element\u标记i中显示哪一个副本并不重要。t2.所有副本上的楼层标识均相同

**

如t1所示,所有元素_标记都是唯一的。但在t2中,元素标记可以看到两次或更多。。 我想要的是从t1中选择*。
我想从t2中选择不同的元素标记,楼层id,其中CONCATt1.project,'''.',t1.element\u标记=CONCATt2.project,'.',t2.element\u标记

使用子查询尝试下面的方法

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%'

使用子查询试试下面的方法

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%'
如你所说

t2.所有副本上的楼层标识均相同

然后您的查询就可以了,您可以在select中添加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
如你所说

t2.所有副本上的楼层标识均相同

然后您的查询就可以了,您可以在select中添加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


示例数据和预期输出是helpful示例数据和预期输出是helpful,但在t1中,我有一个名为Typ的列。可以有重复的,这是好的。这不会影响t1中的所有列吗?我只希望元素标记、项目、元素标记和楼层id是不同的吗?还是仅仅是一个项目?这是马克·威奇唯一需要区分的元素@BjörnC它将使用project、element_mark和floor_idok创建distinct,但我不能有distinct project或distinct floor_id。但我找到了解决方案:内部连接选择DISTINCTelement_mark,project,floor_id,来自CONCATt1.project上的dbo.IMP_MODEL_GEOMETRY t2,'''t1.element_mark=concat2.project,'',t2.谢谢你带路!但在t1中,我有一个名为Typ的列。可以有重复的,这是好的。这不会影响t1中的所有列吗?我只希望元素标记、项目、元素标记和楼层id是不同的吗?还是仅仅是一个项目?这是马克·威奇唯一需要区分的元素@BjörnC它将使用project、element_mark和floor_idok创建distinct,但我不能有distinct project或distinct floor_id。但我找到了解决方案:内部连接选择DISTINCTelement_mark,project,floor_id,来自CONCATt1.project上的dbo.IMP_MODEL_GEOMETRY t2,'''t1.element_mark=concat2.project,'',t2.谢谢你带路!我不能在t1上使用Distinct。为什么不能?DISTINCT t1.*,t2.floor\u id将在t1中为您提供所有不同的条目,后跟DISTINCT t2.floor\u id,但它不会从t1中获得不同的类型吗?唯一选择的一行?我不需要t1的所有行。或者它是t1中不连续的行?我不明白!通过在表上执行distinct t1.*检查所有合并的列。根据您的示例数据,distinct t1.*将返回3行。我无法在t1上使用distinct。为什么不使用?DISTINCT t1.*,t2.floor\u id将在t1中为您提供所有不同的条目,后跟DISTINCT t2.floor\u id,但它不会从t1中获得不同的类型吗?唯一选择的一行?我不需要t1的所有行。或者它是t1中不连续的行?我不明白!通过在表上执行distinct t1.*检查所有合并的列。根据示例数据,distinct t1.*将返回3行。