Как написать правильный оператор SQL-запроса, используя условие объединения?

#sql

#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 для получения информации о трех полях?

Комментарии:

1. Ваш вопрос неясен. Можете ли вы пояснить с примерами?

2. схема одной таблицы: a_term_id, b_term_id, c_term_id, схема другой таблицы: term_id, term_title, term_description, файлы a_term_id, b_term_id, c_term_id ссылаются на term_id, так как же мне написать инструкцию sql для получения информации о трех полях?

3. Я отредактировал ваш вопрос, чтобы схема была понятной. Постарайтесь прояснить свои вопросы ради нас, в том числе отредактировав их после того, как вы их зададите.

Ответ №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
  

Комментарии:

1. но ситуация такова, что более одного поля в одной таблице ссылаются на одно и то же поле в другой таблице, отличается ли оператор sql join от используемого в вашем примере?

2. Кажется, в вашем примере есть три таблицы: вопрос, ответ, экзамен. Но в моей ситуации у меня есть только две таблицы.

3. @David: Правка 2 — это то, что вам нужно?

4. W3Schools не является рекомендуемым ресурсом, большая часть их данных устарела или неверна. Смотрите: w3fools.com

Ответ №2:

Вот пример. Предположим, что у нас есть две таблицы — Employees и Companies:

 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
  

Комментарии:

1. В моей ситуации более одного поля в таблице ссылаются на одно и то же поле в другой таблице.

Ответ №3:

Ваш вопрос немного неясен, но я предполагаю, что у вас есть таблица A с тремя полями, каждое из которых идентифицирует (возможно, отличную) строку из таблицы B. Вы хотите получить информацию из каждой из этих строк таблицы B на основе значений полей одной строки таблицы A.

Для этого вам нужно будет объединить таблицу A с таблицей B три раза, по одному разу для каждого поля таблицы 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  ...
  

Ответ №4:

 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 )