SQL συμμετάσχουν: όπου ρήτρα εναντίον σε ρήτρα

ψήφοι
483

Μετά την ανάγνωση, αυτό είναι όχι ένα αντίγραφο της Ρητή vs Σιωπηρή SQL ενώνει . Η απάντηση μπορεί να σχετίζεται (ή ακόμα και το ίδιο), αλλά το θέμα είναι διαφορετικό.


Ποια είναι η διαφορά και τι πρέπει να πάει σε κάθε ένα;

Αν καταλαβαίνω τη θεωρία σωστά, η βελτιστοποίηση ερωτήματος θα πρέπει να είναι σε θέση να χρησιμοποιήσει και τα δύο εναλλακτικά.

Δημοσιεύθηκε 09/12/2008 στις 21:14
πηγή χρήστη
Σε άλλες γλώσσες...                            


17 απαντήσεις

ψήφοι
640

Δεν είναι το ίδιο πράγμα.

Εξετάστε αυτά τα ερωτήματα:

SELECT *
FROM Orders
LEFT JOIN OrderLines ON OrderLines.OrderID=Orders.ID
WHERE Orders.ID = 12345

και

SELECT *
FROM Orders
LEFT JOIN OrderLines ON OrderLines.OrderID=Orders.ID 
    AND Orders.ID = 12345

Η πρώτη θα επιστρέψει την παραγγελία και τις γραμμές του, αν υπάρχουν, για τον αύξοντα αριθμό 12345. Η δεύτερη θα επιστρέψει όλες τις παραγγελίες, αλλά μόνο σκοπό 12345θα έχει κανένα γραμμές που συνδέονται με αυτό.

Με μια INNER JOIN, οι ρήτρες είναι ουσιαστικά ισοδύναμες. Ωστόσο, μόνο και μόνο επειδή έχουν την ίδια λειτουργία, με την έννοια ότι παράγουν τα ίδια αποτελέσματα, δεν σημαίνει ότι τα δύο είδη των ρητρών έχουν την ίδια σημασιολογική έννοια.

Απαντήθηκε 09/12/2008 στις 21:21
πηγή χρήστη

ψήφοι
154
  • Δεν έχει σημασία για την εσωτερική ενώνει
  • Θέματα για την εξωτερική ενώνει

    ένα. WHEREΡήτρα: Μετά την ένταξη. Εγγραφές θα φιλτράρονται μετά ενταχθούν έχει λάβει χώρα.

    σι. ONΡήτρα - Πριν από την ένταξή τους. Εγγραφές (από δεξιά πίνακα) θα πρέπει να φιλτράρεται πριν από την ένταξή τους. Αυτό μπορεί να καταλήξει ως null στο αποτέλεσμα (από το εξωτερικό σύνδεσμο).



Παράδειγμα : Έστω τα παρακάτω πίνακες:

    1. documents:
     | id    | name        |
     --------|-------------|
     | 1     | Document1   |
     | 2     | Document2   |
     | 3     | Document3   |
     | 4     | Document4   |
     | 5     | Document5   |


    2. downloads:
     | id   | document_id   | username |
     |------|---------------|----------|
     | 1    | 1             | sandeep  |
     | 2    | 1             | simi     |
     | 3    | 2             | sandeep  |
     | 4    | 2             | reya     |
     | 5    | 3             | simi     |

α) Μέσα WHEREρήτρα:

  SELECT documents.name, downloads.id
    FROM documents
    LEFT OUTER JOIN downloads
      ON documents.id = downloads.document_id
    WHERE username = 'sandeep'

 For above query the intermediate join table will look like this.

    | id(from documents) | name         | id (from downloads) | document_id | username |
    |--------------------|--------------|---------------------|-------------|----------|
    | 1                  | Document1    | 1                   | 1           | sandeep  |
    | 1                  | Document1    | 2                   | 1           | simi     |
    | 2                  | Document2    | 3                   | 2           | sandeep  |
    | 2                  | Document2    | 4                   | 2           | reya     |
    | 3                  | Document3    | 5                   | 3           | simi     |
    | 4                  | Document4    | NULL                | NULL        | NULL     |
    | 5                  | Document5    | NULL                | NULL        | NULL     |

  After applying the `WHERE` clause and selecting the listed attributes, the result will be: 

   | name         | id |
   |--------------|----|
   | Document1    | 1  |
   | Document2    | 3  | 

β) Μέσα JOINρήτρα

  SELECT documents.name, downloads.id
  FROM documents
    LEFT OUTER JOIN downloads
      ON documents.id = downloads.document_id
        AND username = 'sandeep'

For above query the intermediate join table will look like this.

    | id(from documents) | name         | id (from downloads) | document_id | username |
    |--------------------|--------------|---------------------|-------------|----------|
    | 1                  | Document1    | 1                   | 1           | sandeep  |
    | 2                  | Document2    | 3                   | 2           | sandeep  |
    | 3                  | Document3    | NULL                | NULL        | NULL     |
    | 4                  | Document4    | NULL                | NULL        | NULL     |
    | 5                  | Document5    | NULL                | NULL        | NULL     |

Notice how the rows in `documents` that did not match both the conditions are populated with `NULL` values.

After Selecting the listed attributes, the result will be: 

   | name       | id   |
   |------------|------|
   |  Document1 | 1    |
   |  Document2 | 3    | 
   |  Document3 | NULL |
   |  Document4 | NULL | 
   |  Document5 | NULL | 
Απαντήθηκε 07/01/2014 στις 21:54
πηγή χρήστη

ψήφοι
137

Σε INNER JOINs είναι εναλλάξιμα, και η βελτιστοποίηση θα τα αναδιατάξετε κατά βούληση.

Σε OUTER JOINs, δεν είναι κατ 'ανάγκη εναλλάξιμα, ανάλογα με το ποια πλευρά του συμμετάσχουν εξαρτώνται.

Τους έβαλα σε κάθε χώρα, ανάλογα με την αναγνωσιμότητα.

Απαντήθηκε 09/12/2008 στις 21:21
πηγή χρήστη

ψήφοι
30

Ο τρόπος που το κάνω είναι:

Πάντα θέσει οι συνθήκες ενταχθούν στην on ρήτρα Αν κάνετε μια εσωτερική ενταχθούν, ώστε να μην προσθέσει όπου οι συνθήκες για την επί ρήτρα, τα βάζουμε στη ρήτρα όπου

Αν κάνετε μια αριστερή ενταχθούν, προσθέτετε όπου οι συνθήκες για την επί ρήτρα για τον πίνακα στη δεξιά πλευρά της συνένωσης. Αυτό είναι ένας μούστος επειδή προσθέτοντας μια όπου ρήτρα που παραπέμπει στη δεξιά πλευρά της συνένωσης θα μετατρέψει το ενώνονται για να εσωτερικός σύνδεσμος (με μια εξαίρεση που περιγράφεται παρακάτω).

Η εξαίρεση είναι ότι, όταν ψάχνετε για τα αρχεία που δεν είναι σε ένα συγκεκριμένο πίνακα, θα προσθέσετε το refernce σε ένα μοναδικό αναγνωριστικό (που δεν είναι ποτέ μηδενική) στη δεξιά ενταχθούν πίνακα με τη ρήτρα, όπου με αυτό τον τρόπο «Όπου t2. idfield είναι άκυρη». Έτσι, η μόνη φορά που θα πρέπει να αναφέρουν ένα πίνακα στη δεξιά πλευρά της συνένωσης είναι να βρείτε τα αρχεία αυτά που δεν είναι στο τραπέζι.

Απαντήθηκε 09/12/2008 στις 21:57
πηγή χρήστη

ψήφοι
29

Σε εσωτερικός σύνδεσμος, που σημαίνουν το ίδιο πράγμα. Ωστόσο, θα πάρετε διαφορετικά αποτελέσματα σε εξωτερικό σύνδεσμο ανάλογα με το αν βάλετε την κατάσταση ενταχθούν στο ΠΟΥ εναντίον της ρήτρας ON. Ρίξτε μια ματιά σε αυτό το σχετικό ερώτημα και την απάντηση (από μένα).

Νομίζω ότι έχει περισσότερο νόημα να τη συνήθεια να θέτει πάντα την κατάσταση ενταχθούν στη ρήτρα ON (εκτός αν είναι ένα εξωτερικό ενταχθούν και που πραγματικά το θέλουν στην οποία ρήτρα) που καθιστά σαφέστερο σε όποιον διαβάζει το ερώτημά σας ποιες συνθήκες οι πίνακες που εντάχθηκαν στην, και επίσης βοηθά στην πρόληψη της ρήτρας WHERE από το να είναι δεκάδες γραμμές καιρό.

Απαντήθηκε 09/12/2008 στις 21:20
πηγή χρήστη

ψήφοι
12

Αυτό το άρθρο εξηγεί με σαφήνεια τη διαφορά. Εξηγεί, επίσης, το «ON joined_condition vs ΠΟΥ joined_condition ή joined_alias είναι άκυρη».

Ο ΠΟΥ φίλτρα ρήτρα και η αριστερά και η δεξιά πλευρά της JOIN, ενώ η ρήτρα ON θα φιλτράρει πάντα τη δεξιά πλευρά μόνο.

  1. Αν θέλετε πάντα να φέρω τα αριστερά σειρές και JOIN μόνο αν κάποια κατάσταση αγώνες τότε θα πρέπει η ρήτρα περί.
  2. Αν θέλετε να φιλτράρετε το προϊόν που ενώνει τις δύο πλευρές, τότε θα πρέπει να χρησιμοποιήσετε τη ρήτρα WHERE.
Απαντήθηκε 25/05/2014 στις 15:20
πηγή χρήστη

ψήφοι
7

Από την άποψη της βελτιστοποίησης, δεν θα πρέπει να κάνει τη διαφορά αν έχετε ορίσει σας συμμετάσχετε ρήτρες με ON ή WHERE.

Ωστόσο, IMHO, νομίζω ότι είναι πολύ πιο σαφής για να χρησιμοποιήσει τη ρήτρα ON κατά την εκτέλεση ενώνει. Με αυτόν τον τρόπο έχετε ένα συγκεκριμένο τμήμα σας ερώτημα που υπαγορεύει πως η ένταξη αντιμετωπίζεται σε σχέση με αναμιχθεί με το υπόλοιπο των ρητρών ΠΟΥ.

Απαντήθηκε 09/12/2008 στις 21:21
πηγή χρήστη

ψήφοι
5

Υπάρχει μεγάλη διαφορά ανάμεσα στο οποίο ρήτρα εναντίον σε ρήτρα , όταν πρόκειται για την αριστερά ενταχθούν.

Εδώ είναι το παράδειγμα:

mysql> desc t1; 
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| fid   | int(11)     | NO   |     | NULL    |       |
| v     | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

Υπάρχουν FID είναι id του πίνακα t2.

mysql> desc t2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| v     | varchar(10) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Ερώτημα για «στο ρήτρα»:

mysql> SELECT * FROM `t1` left join t2 on fid = t2.id AND t1.v = 'K' 
    -> ;
+----+-----+---+------+------+
| id | fid | v | id   | v    |
+----+-----+---+------+------+
|  1 |   1 | H | NULL | NULL |
|  2 |   1 | B | NULL | NULL |
|  3 |   2 | H | NULL | NULL |
|  4 |   7 | K | NULL | NULL |
|  5 |   5 | L | NULL | NULL |
+----+-----+---+------+------+
5 rows in set (0.00 sec)

Ερώτημα για «ρήτρα όπου»:

mysql> SELECT * FROM `t1` left join t2 on fid = t2.id where t1.v = 'K';
+----+-----+---+------+------+
| id | fid | v | id   | v    |
+----+-----+---+------+------+
|  4 |   7 | K | NULL | NULL |
+----+-----+---+------+------+
1 row in set (0.00 sec)

Είναι σαφές ότι, το πρώτο ερώτημα επιστρέφει ένα αρχείο από το t1 και εξαρτώνται από σειρά της από t2, εάν υπάρχουν, για σειρά t1.v = «Κ».

Το δεύτερο ερώτημα επιστρέφει σειρές από t1, αλλά μόνο για t1.v = «K» θα έχει καμία σχετίζεται σειρά με αυτό.

Απαντήθηκε 13/03/2016 στις 06:31
πηγή χρήστη

ψήφοι
1

Κανονικά, το φιλτράρισμα γίνεται επεξεργασία στον όρο WHERE μία φορά οι δύο πίνακες έχουν ήδη ενταχθεί. Είναι δυνατόν, ωστόσο, ότι ίσως να θέλετε να φιλτράρετε ένα ή δύο από τα τραπέζια πριν από την ένταξή τους. δηλαδή, η ρήτρα όπου ισχύει για όλο το σύνολο των αποτελεσμάτων, ενώ η ρήτρα για ισχύει μόνο για την ένταξη στην ερώτηση.

Απαντήθηκε 16/02/2018 στις 05:29
πηγή χρήστη

ψήφοι
1

για την καλύτερη πίνακες απόδοσης θα πρέπει να έχουν ένα ειδικό δείκτη στήλη που θα χρησιμοποιηθεί για ΣΥΜΜΕΤΕΧΕΙ.

οπότε αν η στήλη που διέπουν για δεν είναι ένα από αυτά τα ευρετήριο στήλες τότε υποψιάζομαι ότι είναι καλύτερα να το κρατήσει στο ΠΟΥ.

έτσι ώστε να JOIN τη χρήση των δεικτών στήλες, στη συνέχεια, μετά JOIN μπορείτε να εκτελέσετε την κατάσταση σχετικά με την καμία ευρετήριο στήλης.

Απαντήθηκε 12/12/2014 στις 21:10
πηγή χρήστη

ψήφοι
0

Προσπαθείτε να ενταχθούν τα δεδομένα στοιχεία ή το φίλτρο;

Για την αναγνωσιμότητα που έχει περισσότερο νόημα να απομονώσουν αυτές τις περιπτώσεις χρήσης με και πού αντίστοιχα.

  • ενταχθούν τα δεδομένα σε ON
  • δεδομένα φίλτρου σε ΟΠΟΥ

Μπορεί να γίνει πολύ δύσκολο να διαβάσει ένα ερώτημα στο οποίο υπάρχει η προϋπόθεση JOIN και μια κατάσταση φιλτραρίσματος στον όρο WHERE.

Απόδοση σοφός δεν θα πρέπει να δείτε μια διαφορά, αν και διαφορετικοί τύποι SQL μερικές φορές να χειριστεί το σχεδιασμό ερώτημα με διαφορετικό τρόπο έτσι ώστε να μπορεί να αξίζει να δοκιμάσετε ¯\_(ツ)_/¯(μην είστε ενήμεροι για την προσωρινή αποθήκευση που πραγματοποιεί την ταχύτητα του ερωτήματος)

Επίσης, όπως έχουν επισημάνει άλλοι, αν χρησιμοποιείτε ένα εξωτερικό σύνδεσμο θα πάρετε διαφορετικά αποτελέσματα αν τοποθετήσετε την κατάσταση του φίλτρου στη ρήτρα ON γιατί μόνο επιπτώσεις έναν από τους πίνακες.

Έγραψα μια πιο σε βάθος θέση για το θέμα αυτό εδώ: https://dataschool.com/learn/difference-between-where-and-on-in-sql

Απαντήθηκε 30/04/2019 στις 02:17
πηγή χρήστη

ψήφοι
0

Ας εξετάσουμε αυτά τα τραπέζια:

ΕΝΑ

id | SomeData

σι

id | id_A | SomeOtherData

id_A είναι ένα ξένο κλειδί στον πίνακα A

Έγραφες αυτό το ερώτημα:

SELECT *
FROM A
LEFT JOIN B
ON A.id = B.id_A;

Θα παρέχει αυτό το αποτέλεσμα:

/ : part of the result
                                       B
                      +---------------------------------+
            A         |                                 |
+---------------------+-------+                         |
|/////////////////////|///////|                         |
|/////////////////////|///////|                         |
|/////////////////////|///////|                         |
|/////////////////////|///////|                         |
|/////////////////////+-------+-------------------------+
|/////////////////////////////|
+-----------------------------+

Τι είναι το Α αλλά όχι το Β σημαίνει ότι υπάρχει μηδενικές τιμές για το Β


Τώρα, ας εξετάσουμε ένα συγκεκριμένο μέρος στο B.id_A, και επιλέξτε το από το προηγούμενο αποτέλεσμα:

/ : part of the result
* : part of the result with the specific B.id_A
                                       B
                      +---------------------------------+
            A         |                                 |
+---------------------+-------+                         |
|/////////////////////|///////|                         |
|/////////////////////|///////|                         |
|/////////////////////+---+///|                         |
|/////////////////////|***|///|                         |
|/////////////////////+---+---+-------------------------+
|/////////////////////////////|
+-----------------------------+

Έγραφες αυτό το ερώτημα:

SELECT *
FROM A
LEFT JOIN B
ON A.id = B.id_A
AND B.id_A = SpecificPart;

Θα παρέχει αυτό το αποτέλεσμα:

/ : part of the result
* : part of the result with the specific B.id_A
                                       B
                      +---------------------------------+
            A         |                                 |
+---------------------+-------+                         |
|/////////////////////|       |                         |
|/////////////////////|       |                         |
|/////////////////////+---+   |                         |
|/////////////////////|***|   |                         |
|/////////////////////+---+---+-------------------------+
|/////////////////////////////|
+-----------------------------+

Επειδή αυτό αφαιρεί το εσωτερικό ενταχθούν στις αξίες που δεν είναι B.id_A = SpecificPart


Τώρα, ας αλλάξουμε το ερώτημα αυτό:

SELECT *
FROM A
LEFT JOIN B
ON A.id = B.id_A
WHERE B.id_A = SpecificPart;

Το αποτέλεσμα είναι τώρα:

/ : part of the result
* : part of the result with the specific B.id_A
                                       B
                      +---------------------------------+
            A         |                                 |
+---------------------+-------+                         |
|                     |       |                         |
|                     |       |                         |
|                     +---+   |                         |
|                     |***|   |                         |
|                     +---+---+-------------------------+
|                             |
+-----------------------------+

Επειδή ολόκληρο το αποτέλεσμα διηθείται κατά B.id_A = SpecificPartτην αφαίρεση των τμημάτων B.id_A = NULL, τα οποία βρίσκονται στην Α που δεν είναι σε Β

Απαντήθηκε 12/04/2019 στις 10:03
πηγή χρήστη

ψήφοι
0

Νομίζω ότι αυτή η διάκριση μπορεί να εξηγηθεί καλύτερα με την λογική σειρά των εργασιών σε SQL , η οποία είναι απλοποιημένη:

  • FROM (Συμπεριλαμβανομένων των ενώνει)
  • WHERE
  • GROUP BY
  • Συγκεντρωτικά
  • HAVING
  • WINDOW
  • SELECT
  • DISTINCT
  • UNION, INTERSECT,EXCEPT
  • ORDER BY
  • OFFSET
  • FETCH

Ενώνει δεν είναι η ρήτρα της επιλογής δήλωση, αλλά ο χειριστής στο εσωτερικό του FROM. Ως εκ τούτου, όλες οι ONρήτρες που ανήκει στον αντίστοιχο JOINφορέα έχουν «ήδη συμβεί» λογικά από τη στιγμή λογική επεξεργασία φτάσει στο WHEREρήτρα. Αυτό σημαίνει ότι στην περίπτωση ενός LEFT JOIN, για παράδειγμα, η εξωτερική ενταχθούν σημειολογία έχει ήδη happend από τη στιγμή που η WHEREεφαρμογή ρήτρας.

Έχω εξήγησε το ακόλουθο παράδειγμα περισσότερο σε βάθος σε αυτό το blog . Κατά την εκτέλεση αυτού του ερωτήματος:

SELECT a.actor_id, a.first_name, a.last_name, count(fa.film_id)
FROM actor a
LEFT JOIN film_actor fa ON a.actor_id = fa.actor_id
WHERE film_id < 10
GROUP BY a.actor_id, a.first_name, a.last_name
ORDER BY count(fa.film_id) ASC;

Η LEFT JOINδεν έχει πραγματικά κανένα χρήσιμο αποτέλεσμα, διότι ακόμη και αν ένας ηθοποιός δεν έπαιξε σε μια ταινία, ο ηθοποιός θα φιλτράρονται, όπως της FILM_IDθα είναι NULLκαι η WHEREρήτρα θα φιλτράρει μια τέτοια σειρά. Το αποτέλεσμα είναι κάτι σαν:

ACTOR_ID  FIRST_NAME  LAST_NAME  COUNT
--------------------------------------
194       MERYL       ALLEN      1
198       MARY        KEITEL     1
30        SANDRA      PECK       1
85        MINNIE      ZELLWEGER  1
123       JULIANNE    DENCH      1

Δηλαδή σαν να έχουμε εσωτερική ένωσε τους δύο πίνακες. Αν μετακινήσετε το γενεσιουργό φίλτρο στο ONρήτρα, γίνεται πλέον τα κριτήρια για τον εξωτερικό σύνδεσμο:

SELECT a.actor_id, a.first_name, a.last_name, count(fa.film_id)
FROM actor a
LEFT JOIN film_actor fa ON a.actor_id = fa.actor_id
  AND film_id < 10
GROUP BY a.actor_id, a.first_name, a.last_name
ORDER BY count(fa.film_id) ASC;

Σημασία το αποτέλεσμα θα περιέχει φορείς χωρίς ταινίες ή χωρίς ταινίες με FILM_ID < 10

ACTOR_ID  FIRST_NAME  LAST_NAME     COUNT
-----------------------------------------
3         ED          CHASE         0
4         JENNIFER    DAVIS         0
5         JOHNNY      LOLLOBRIGIDA  0
6         BETTE       NICHOLSON     0
...
1         PENELOPE    GUINESS       1
200       THORA       TEMPLE        1
2         NICK        WAHLBERG      1
198       MARY        KEITEL        1

Εν συντομία

Πάντοτε να θέσει κατηγόρημα σας, όπου κάνει περισσότερο νόημα, λογικά.

Απαντήθηκε 09/04/2019 στις 13:37
πηγή χρήστη

ψήφοι
0

Για εσωτερικός σύνδεσμος, WHEREκαι ONμπορούν να χρησιμοποιηθούν εναλλακτικά. Στην πραγματικότητα, είναι δυνατό να χρησιμοποιηθεί ONσε ένα συσχετίζονται υποερώτημα. Για παράδειγμα:

update mytable
set myscore=100
where exists (
select 1 from table1
inner join table2
on (table2.key = mytable.key)
inner join table3
on (table3.key = table2.key and table3.key = table1.key)
...
)

Αυτό είναι (IMHO) εντελώς σύγχυση σε έναν άνθρωπο, και είναι πολύ εύκολο να ξεχάσετε να συνδεθούν table1με τίποτα (επειδή ο «οδηγός» πίνακας δεν έχει «για την» ρήτρα), αλλά είναι νόμιμο.

Απαντήθηκε 16/05/2014 στις 23:40
πηγή χρήστη

ψήφοι
0

Στην SQL, ρήτρα του «WHERE» και «ON», είναι το είδος της υπό όρους Statemants, αλλά η κύρια διαφορά μεταξύ τους είναι η «Πού είναι η ρήτρα χρησιμοποιείται Επέλεξε / Ενημέρωση Δηλώσεις για τον καθορισμό των όρων, ενώ η ρήτρα της«ON» χρησιμοποιείται σε ενώνει, όπου ελέγχει ή να ελέγχει αν τα αρχεία Συμφωνήθηκε στους πίνακες στόχο και την πηγή, πριν εγγραφής τους πίνακες

Για παράδειγμα: - «ΟΠΟΥ»

SELECT * FROM εργαζομένων ΟΠΟΥ employee_id = 101

Για παράδειγμα: - 'ON'

* Υπάρχουν δύο πίνακες των εργαζομένων και employee_details, οι στήλες που ταιριάζουν employee_id. *

SELECT * FROM εργαζομένων INNER JOIN employee_details ΓΙΑ employee.employee_id = employee_details.employee_id

Ελπίδα έχω απαντήσει Question.Revert σας πίσω για διευκρινίσεις.

Απαντήθηκε 05/02/2014 στις 11:57
πηγή χρήστη

ψήφοι
0

Νομίζω ότι είναι το αποτέλεσμα ενταχθούν ακολουθία. Στην επάνω αριστερή ενταχθούν περίπτωση, SQL μην Αριστερά ενταχθούν και στη συνέχεια να κάνετε όταν το φίλτρο. Στην περίπτωση Ντάουνερ, βρείτε Orders.ID = 12345 πρώτα, και στη συνέχεια να μην ενταχθούν.

Απαντήθηκε 07/01/2014 στις 04:49
πηγή χρήστη

ψήφοι
-5

αυτό είναι η λύση μου.

SELECT song_ID,songs.fullname, singers.fullname
FROM music JOIN songs ON songs.ID = music.song_ID  
JOIN singers ON singers.ID = music.singer_ID
GROUP BY songs.fullname

Θα πρέπει να έχετε το GROUP BYνα πάμε στη δουλειά μας.

Ελπίζω αυτή τη βοήθεια.

Απαντήθηκε 26/04/2010 στις 08:53
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more