У меня есть 2 таблицы, таблица questions
и таблица answers
со следующими примерами данных:
+-----------------------------------+
| Questions |
+----+------------------------------+
| id | title |
+----+------------------------------+
| 1 | What is your favourite game? |
| 2 | What is your favourite food? |
+----+------------------------------+
+-------------------------------------------------+
| Answers |
+----+------------------------------+-------------+
| id | text | question_id |
+----+------------------------------+-------------+
| 1 | The Last Of Us | 1 |
| 2 | PlayerUnknowns Battlegrounds | 1 |
| 3 | Uncharted | 1 |
| 4 | KFC | 2 |
| 5 | Pizza | 2 |
+----+------------------------------+-------------+
Создавая отношения «один ко многим», так как на один вопрос может быть много ответов, я могу выполнить любое из следующих действий:
SELECT
id, text
FROM
answers
WHERE
question_id = 1
Или же:
SELECT
answers.id, answers.text
FROM
answers
JOIN
questions
ON
answers.question_id = questions.id
WHERE
questions.id = 1
Или же:
SELECT
answers.id, answers.text
FROM
questions
JOIN
answers
ON
questions.id = answers.question_id
WHERE
questions.id = 1
Все они возвращают следующие (ожидаемые) результаты:
+-----------------------------------+
| Results |
+----+------------------------------+
| id | text |
+----+------------------------------+
| 1 | The Last Of Us |
| 2 | PlayerUnknowns Battlegrounds |
| 3 | Uncharted |
+----+------------------------------+
Следует ли избегать любого из них? Есть ли какой-нибудь предпочтительный способ сделать это? Просто интересно, что можно и чего нельзя делать при опросе отношений в целом.
2 ответа
Если вы хотите только получить ответы, не включайте таблицу вопросов. Просто выберите из ответов.
Добавление неиспользуемых таблиц в ваш запрос вообще не имеет смысла - это затрудняет чтение запроса и, следовательно, усложняет его обслуживание, а также усложняет работу базы данных (хотя современные базы данных могут просто оптимизировать неиспользуемые части запроса), чтобы получить те же результаты.
Если вы хотите обозначить взаимосвязь между таблицей «вопросы» и «ответы», вы можете сделать столбец идентификатора из таблицы «вопросы» как первичный ключ и столбец question_id из «ответов» как внешний ключ, и вы используете СОЕДИНЕНИЕ, когда вам нужны данные (столбцы) из более чем одной таблицы в вашем случае, если вы хотите, чтобы столбец заголовка был включен, вы можете присоединиться к таблицам
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.