Ik heb drie tabellen met de naam
**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
Om nu de naam van de student weer te geven met de cursusnaam die hij had gestudeerd,
**Result**
---------------------------
Student Course
---------------------------
ahmed physic
ahmed maths
ahmed computer
ahmed chemistry
ali physic
ali maths
john computer
john chemistry
king physic
king maths
Ik bouw de volgende query
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
Maar het geeft niet het vereiste resultaat…
En wat zou een genormaliseerde vorm zijn, als ik wil weten wie de manager is boven de andere:
**employee**
-------------------
id name
-------------------
1 ali
2 king
3 mak
4 sam
5 jon
**manage**
--------------
mid eid
--------------
1 2
1 3
3 4
4 5
En wil dit resultaat krijgen:
**result**
--------------------
Manager Staff
--------------------
ali king
ali mak
mak sam
sam jon
Antwoord 1, autoriteit 100%
Gewoon gebruiken:
select s.name "Student", c.name "Course"
from student s, bridge b, course c
where b.sid = s.sid and b.cid = c.cid
Antwoord 2, autoriteit 96%
Gebruik de ANSI-syntaxis en het zal veel duidelijker zijn hoe u de tabellen samenvoegt:
SELECT s.name as Student, c.name as Course
FROM student s
INNER JOIN bridge b ON s.id = b.sid
INNER JOIN course c ON b.cid = c.id
ORDER BY s.name
Antwoord 3, autoriteit 10%
Voor het normaliseren van formulier
select e1.name as 'Manager', e2.name as 'Staff'
from employee e1
left join manage m on m.mid = e1.id
left join employee e2 on m.eid = e2.id
Antwoord 4, autoriteit 2%
SELECT *
FROM user u
JOIN user_clockits uc ON u.user_id=uc.user_id
JOIN clockits cl ON cl.clockits_id=uc.clockits_id
WHERE user_id = 158
Antwoord 5
SELECT
employees.id,
CONCAT(employees.f_name," ",employees.l_name) AS 'Full Name', genders.gender_name AS 'Sex',
depts.dept_name AS 'Team Name',
pay_grades.pay_grade_name AS 'Band',
designations.designation_name AS 'Role'
FROM employees
LEFT JOIN genders ON employees.gender_id = genders.id
LEFT JOIN depts ON employees.dept_id = depts.id
LEFT JOIN pay_grades ON employees.pay_grade_id = pay_grades.id
LEFT JOIN designations ON employees.designation_id = designations.id
ORDER BY employees.id;
Je kunt AAN meerdere TABELLEN deelnemen, zoals dit voorbeeld hierboven.
Antwoord 6
Query om deel te nemen aan meer dan twee tabellen:
SELECT ops.field_id, ops.option_id, ops.label
FROM engine4_user_fields_maps AS map
JOIN engine4_user_fields_meta AS meta ON map.`child_id` = meta.field_id
JOIN engine4_user_fields_options AS ops ON map.child_id = ops.field_id
WHERE map.option_id =39 AND meta.type LIKE 'outcomeresult' LIMIT 0 , 30
Antwoord 7
Doe niet zo mee. Het is echt een heel slechte gewoonte!!! Het vertraagt de prestaties bij het ophalen met enorme gegevens. Als er bijvoorbeeld 100 rijen in elke tabel waren, moet de databaseserver 100x100x100 = 1000000
keer ophalen. Het moest 1 million
keer ophalen. Om dat probleem op te lossen, voegt u zich bij de eerste twee tabellen die het resultaat kunnen ophalen in een minimaal mogelijke overeenkomst (het hangt af van uw databaseschema). Gebruik dat resultaat in Subquery en voeg het vervolgens samen met de derde tabel en haal het op. Voor de allereerste join –> 100x100= 10000
keer en stel dat we 5 overeenkomende resultaten krijgen. En dan voegen we ons bij de derde tabel met het resultaat –> 5x100 = 500.
Totaal aantal keer ophalen = 10000+500 = 10200
keer. En zo ging het optreden omhoog!!!
Antwoord 8
Gewoon een punt toevoegen aan eerdere antwoorden die we in MySQL kunnen gebruiken
table_factor syntax
OF
joined_table syntax
Table_factor voorbeeld
SELECT prd.name, b.name
FROM products prd, buyers b
Aangeboden tabelvoorbeeld
SELECT prd.name, b.name
FROM products prd
left join buyers b on b.bid = prd.bid;
FYI: Negeer het feit dat de linker de linker join op het verbonden tafelvoorbeeld veel logisch is (in werkelijkheid zouden we een soort van voegend tabel gebruiken om koper aan de producttabel te koppelen in plaats van korter te besparen in de producttafel).
Antwoord 9
Query for three table join and limit set
SELECT * FROM (SELECT t1.follower_userid, t2.*, t3.login_thumb, t3.login_name,
t3.bio, t3.account_status, t3.gender
FROM videos t2
LEFT JOIN follower t1
ON t1.follower_userid = t2.user_id
LEFT JOIN videos_user t3
ON t1.follower_userid = t3.login_userid
WHERE t1.following_userid='$userid'
LIMIT $startpoint , $limit) AS ID
ORDER BY ID DESC
Antwoord 10
Gebruik dit:
SELECT s.name AS Student, c.name AS Course
FROM student s
LEFT JOIN (bridge b CROSS JOIN course c)
ON (s.id = b.sid AND b.cid = c.id);