如何在SQL中从两个表中进行选择并匹配两列?

如何在SQL中从两个表中进行选择并匹配两列?,sql,Sql,所以我要做的是从表1中选择所有具有特定项目编号的记录。然后我将连接另一个表,只得到一个名为“FloorId”的列,该列同时等于表1中的Project和Element (SELECT Project FROM dbo.IMP_MODEL_GEOMETRY WHERE dbo.IMP_GEOMETRY.Project = dbo.IMP_ELEMENT.Project AND dbo.IMP_GEOMETRY.Element = dbo.IMP_ELEMENT.Element) 在dbo.IMP_

所以我要做的是从表1中选择所有具有特定项目编号的记录。然后我将连接另一个表,只得到一个名为“FloorId”的列,该列同时等于表1中的Project和Element

(SELECT Project FROM dbo.IMP_MODEL_GEOMETRY WHERE dbo.IMP_GEOMETRY.Project = dbo.IMP_ELEMENT.Project AND dbo.IMP_GEOMETRY.Element = dbo.IMP_ELEMENT.Element)
在dbo.IMP_几何图形表中,我将获得有关项目和元素的多个结果,因此我可以选择第一个。。独特的

这就是我尝试过的:

$sql = "SELECT * FROM dbo.IMP_ELEMENT WHERE Project LIKE '%$objNr%'
            INNER JOIN dbo.IMP_MODEL_GEOMETRY ON dbo.IMP_ELEMENT.Project = dbo.IMP_MODEL_GEOMETRY.Project";
我是SQL新手,不知道“dbo.IMP”中的“.”代表什么。表名是:dbo.IMP_元素(我见过点标记表的查询,点后是列名。但在本例中,点并不同时表示表和列,它只是表名中的一个点

除了在连接中项目是列(dbo.IMP\u MODEL\u GEOMETRY.Project)之外

我期望的表类似于:

id    Project    Element    FloorId
Floorrid来自表2

编辑


这两个表都包含“Project”和“Element”,所以我可以使用它们进行匹配。在表1中,每个项目元素只有一行,但在表2中,可以有多行包含Project元素,因此在表2中,可以只选择找到的第一个匹配项。

您可以按下面的方式尝试-

SELECT a.id,a.project,a.element,b.floorid FROM dbo.IMP_ELEMENT a
            INNER JOIN dbo.IMP_MODEL_GEOMETRY b ON a.Project = b.Project and a.element=b.element
WHERE a.Project LIKE '%$objNr%'

或者你可以试试下面的

select table1.*, table2.FloorId
from IMP_ELEMENT as table1,
     IMP_MODEL_GEOMETRY as table2 
where table1.Project = table2.Project
  and table1.Project like '%Whatever%';
您可以随意更改邮件表

我是SQL新手,不知道“dbo.IMP”中的“.”代表什么

“.”是语法的一部分,用于标识您要查找的元素。完整地说,这是..例如Adventureworks.dbo.customer

通过添加另一个“.”并指定列名,也可以扩展到列

但是开发人员很懒惰,如果不指定数据库,那么引擎将使用查询当前连接的数据库。不指定数据库是完全正常的

事实上,我们非常懒惰,大多数人都没有指定模式(dbo.part),因为数据库引擎只会检查所有模式

选择数据-连接

SELECT
    --use table aliases (t1.) for each column, this is shorthand for dbo.table1 
    --if the same column exists in more than one table the database engine knows 
    --which one you want by looking at the aliases  
    t1.column_name 
    ,t2.column_name
FROM 
    dbo.table1 as t1
    INNER JOIN dbo.table2 as t2  
        --inner join returns only rows where the join matches both tables 
        ON t1.primary_key_column = t2.foreign_key_column 
WHERE
    --the join gives you a super table with all the rows that matched the join
    --now you can add in any filters to your results
    t1.some_column = 'foo'
;

谢谢。但我需要同时匹配项目和元素,因为它是一个值。从表1中匹配它。要在表2中找到它?!@BjörnC,我也添加了它-你现在可以检查谢谢,我会尝试。是否可以从表1中选择*呢?@BjörnC,是的,只需在选择中写一个。*太棒了,带一个a。在最后一个WHERE项目前面…它是RK很有魅力。感谢今天的你:始终使用现代、明确的
JOIN
语法。更易于编写(无错误),更易于阅读(和维护),如果neededIt不清楚要实现什么,则更容易转换为外部联接。IMP_MODEL_GEOMETRY表包含每个项目和元素的多个楼板线,并且您希望任意选择每个项目和元素的一个楼板线?即
select Project,Element,min(楼板线)例如,从imp_model_geometry group by project,element
中。这已经是您要找的吗?您要找的是什么DBMS?这是SQL Server吗?请用您正在使用的DBMS标记您的请求。