#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 )