2011-04-24 37 views
0

有三个字段的表,所有的人都指同场的另一个表,如下所示:如何使用连接条件编写正确的SQL查询语句?

table1 
------- 
! a_term_id* ! b_term_id* ! c_term_id* ! 
!   !   !   ! 

table2 
------- 

! term_id ! term_title ! term_description ! 
! ------- !   !     ! 

列a_term_id,b_term_id,c_term_id都是指term_id

我应该怎么写SQL语句检索三个字段的信息?

+0

你的问题不明确。你能用例子来详细说明吗? – 2011-04-24 06:37:29

+0

请更清楚 – sym3tri 2011-04-24 06:42:05

+0

一个表的模式是:a_term_id,b_term_id,c_term_id,另一个表的模式是:term_id,term_title,term_description,fileds a_term_id,b_term_id,c_term_id都是指term_id,所以我该如何写sql语句检索三个字段的信息? – David 2011-04-24 06:45:07

回答

1

我想你需要知道Sql_Join是如何工作的。在这里W3Schools你可以找到有用的例子。

一个简单的例子:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo 
FROM Persons 
INNER JOIN Orders 
ON Persons.P_Id=Orders.P_Id 
ORDER BY Persons.LastName 

编辑

你可以尝试这样的:

SELECT * FROM tableA 
inner join tableB on tableA.term_id = tableB.term_id 
inner join tableC on tableA.term_id = tableC.term_id; 

它,你可以根据自己的需要修改的例子。


编辑2

SELECT * FROM tableB 
JOIN tableA AS tableA1 ON tableB.term_id = tableA1.a_term_id 
JOIN tableA AS tableA2 ON tableB.term_id = tableA2.b_term_id 
JOIN tableA AS tableA3 ON tableB.term_id = tableA3.c_term_id 
+0

但情况是一个表中的多个字段引用另一个表中的同一个字段,sql连接语句是否与您的示例中使用的语句不同? – David 2011-04-24 06:51:58

+0

@David:请参阅答案中的编辑。 – 2011-04-24 06:58:07

+0

看起来有三个表格:你的例子中的问题,答案,考试。但我的情况只有两张桌子。 – David 2011-04-24 06:59:19

0

下面是一个例子。假设我们有两个表 - 员工与公司:

CREATE TABLE Employees(
    Id int, 
    Name varchar(128), 
    CompanyId int); 

CREATE TABLE Companies( 
    Id int, 
    Name varchar(128), 
    Address varchar(1024), 
    DateFounded datetime); 

下面的SQL查询将加入的表:

SELECT * FROM Employees 
    INNER JOIN Companies 
    ON Employees.CompanyId = Companies.Id 
+0

我的情况在表中有多个字段引用另一个表中的相同字段。 – David 2011-04-24 07:05:35

0

你的问题是有点不清楚,但我会想,你有一个表A具有三个字段,其中每个字段标识表B的(可能不同的)行。您希望基于表A的单个行的字段值从每个表B的行检索信息。

要做到这一点,您需要三次将表A连接到表B s,为表A的每个字段分配一次。应为每个连接分配一个别名,然后可以通过限定的字段名称引用连接表中的字段。

SELECT b1.info, b2.info, b3.info 
FROM A JOIN B AS b1 ON field1 = b1.field 
     JOIN B AS b2 ON field2 = b2.field 
     JOIN B AS b3 ON field3 = b2.field 
WHERE ... 
0
SELECT 
t.a_term_id, a.term_title, a.term_description, 
t.b_term_id, b.term_title, b.term_description, 
t.c_term_id, c.term_title, c.term_description 
FROM abc_terms t JOIN (terms_info a, terms_info b, terms_info c) 
ON (t.a_term_id = a.term_id 
AND t.b_term_id = b.term_id 
AND t.c_term_id = c.term_id)