У меня есть три таблицы с названиями
**Student Table**
-------------
id name
-------------
1 ali
2 ahmed
3 john
4 king
**Course Table**
-------------
id name
-------------
1 physic
2 maths
3 computer
4 chemistry
**Bridge**
-------------
sid cid
-------------
1 1
1 2
1 3
1 4
2 1
2 2
3 3
3 4
4 1
4 2
Теперь, чтобы показать имя студента с названием курса, который он изучал,
**Result**
---------------------------
Student Course
---------------------------
ahmed physic
ahmed maths
ahmed computer
ahmed chemistry
ali physic
ali maths
john computer
john chemistry
king physic
king maths
Я строю следующий запрос
select s.name as Student, c.name as Course from student s, course c join bridge b on c.id = b.cid order by s.name
Но не возвращает требуемый результат ...
И что было бы для нормализованной формы, если я хочу найти, кто является менеджером над другими:
**employee**
-------------------
id name
-------------------
1 ali
2 king
3 mak
4 sam
5 jon
**manage**
--------------
mid eid
--------------
1 2
1 3
3 4
4 5
И хочет получить такой результат:
**result**
--------------------
Manager Staff
--------------------
ali king
ali mak
mak sam
sam jon
Ответы:
Просто используйте:
источник
Используйте синтаксис ANSI, и вам будет намного понятнее, как вы объединяете таблицы:
источник
ANSI
синтаксиса, стоит потратить время на его изучение. Это поможет вам избежатьJOIN
подобных ошибок в будущем.Для нормализации формы
источник
m.mid = e1.id
иm.eid = e2.id
?источник
Вы можете ПРИСОЕДИНЯТЬСЯ к нескольким ТАБЛИЦАм, как в примере выше.
источник
Запрос на объединение более двух таблиц:
источник
Использовать это:
источник
Не присоединяйся так. Это действительно плохая практика !!! Это снизит производительность при выборке больших объемов данных. Например, если в каждой таблице было 100 строк, сервер базы данных должен был выполнить выборку
100x100x100 = 1000000
раз. Его нужно было принести на1 million
время. Чтобы преодолеть эту проблему, присоединитесь к первым двум таблицам, которые могут получить результат с минимально возможным соответствием (это зависит от схемы вашей базы данных). Используйте этот результат в подзапросе, а затем присоедините его к третьей таблице и получите ее. Для самого первого соединения ->100x100= 10000
раз и предположим, что мы получили 5 совпадающих результатов. Затем мы присоединяемся к третьей таблице с результатом ->5x100 = 500.
Всего выборок =10000+500 = 10200
только раз. Таким образом, производительность выросла !!!источник