Drie tabellen samenvoegen met MySQL

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 = 1000000keer ophalen. Het moest 1 millionkeer 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= 10000keer 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 = 10200keer. 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

mysql-documentatie

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

Other episodes