προβληματακι με query

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
nackgr
Δημοσιεύσεις: 1444
Εγγραφή: 22 Ιαν 2006 20:02
Τοποθεσία: Αθηνα
Επικοινωνία:

προβληματακι με query

Δημοσίευση από nackgr » 25 Φεβ 2015 20:49

κατι δεν κανω καλα

εχω το table a
και το table b

θελω οτι υπαρχει στο table a.num
και δεν υπαρχει στο table b.num
να μου το δειξει
και
οτι υπαρχει στο table a.num
και υπαρχει στο table b.num
αλλα δεν παταει στα rules παρακατω να μου τα δειξει κ αυτα

Κώδικας: Επιλογή όλων

SELECT a.num FROM `table_a` `a` 
LEFT JOIN `table_b` `b` ON a.num = b.num
WHERE 
&#40;b.amount >= 100 AND DATEDIFF&#40;CURDATE&#40;&#41;, DATE&#40;b.date&#41;&#41; <= 190 AND DATEDIFF&#40;CURDATE&#40;&#41;, DATE&#40;b.date&#41;&#41; >= 360&#41; OR
&#40;b.amount >= 50 AND DATEDIFF&#40;CURDATE&#40;&#41;, DATE&#40;b.date&#41;&#41; <= 90 AND DATEDIFF&#40;CURDATE&#40;&#41;, DATE&#40;b.date&#41;&#41; >= 190&#41; OR
&#40;b.amount >= 20 AND DATEDIFF&#40;CURDATE&#40;&#41;, DATE&#40;b.date&#41;&#41; <= 0 AND DATEDIFF&#40;CURDATE&#40;&#41;, DATE&#40;b.date&#41;&#41; >= 90&#41;
αυταααααααααααα...
e-Byte.gr
Dafuq.gr

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

προβληματακι με query

Δημοσίευση από alou » 25 Φεβ 2015 23:34

θελω οτι υπαρχει στο table a.num
και δεν υπαρχει στο table b.num
να μου το δειξει
Δεν καταλαβαίνω, κάνεις left join στο a.num = b.num οπότε πως μπορεί το αποτέλεσμα να είναι κάτι που δεν υπάρχει ίδιο σε αυτή τη στήλη και στους 2 πίνακες? αν εννοείς μοναδικές τιμές στον πίνακα, κάτι τέτοιο σου αρκεί

Κώδικας: Επιλογή όλων

SELECT num FROM table_a
WHERE table_a.num NOT IN
&#40;SELECT num FROM table_b&#41;;
Αν όχι, μάλλον χρειάζονται περισσότερες πληροφορίες και ίσως ένα παράδειγμα.

Άβαταρ μέλους
nackgr
Δημοσιεύσεις: 1444
Εγγραφή: 22 Ιαν 2006 20:02
Τοποθεσία: Αθηνα
Επικοινωνία:

προβληματακι με query

Δημοσίευση από nackgr » 25 Φεβ 2015 23:58

εχω 2 πινακες ο ενας (α) εχει αριθμους (Num) ο αλλος πινακας (β) εχει ανανεωσεις αριθμών (num, date, amount)

με λιγα λογια θελω να δω πιοι αριθμοι απο πινακα a δεν υπαρχουν στον πινακα β (δηλαδη δεν εχουν κανει ανανεωση) (a.num = b.num)
να μου δειξει αυτα,

και απο αυτα που υπαρχουν στον β να μου δειξει οποια δεν ειναι μεσα σε καποιο απο τα παρακατω rule

(b.amount >= 100 AND DATEDIFF(CURDATE(), DATE(b.date)) <= 190 AND DATEDIFF(CURDATE(), DATE(b.date)) >= 360) OR
(b.amount >= 50 AND DATEDIFF(CURDATE(), DATE(b.date)) <= 90 AND DATEDIFF(CURDATE(), DATE(b.date)) >= 190) OR
(b.amount >= 20 AND DATEDIFF(CURDATE(), DATE(b.date)) <= 0 AND DATEDIFF(CURDATE(), DATE(b.date)) >= 90)
αυταααααααααααα...
e-Byte.gr
Dafuq.gr

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

προβληματακι με query

Δημοσίευση από gvre » 26 Φεβ 2015 11:43

Το 1ο ερώτημα μπορεί να γίνει με NOT IN, όπως έγραψε ο alou, με NOT EXISTS και με LEFT JOIN, όπως το παρακάτω παράδειγμα:

Κώδικας: Επιλογή όλων

SELECT a.num FROM a 
LEFT JOIN b ON a.num = b.num 
WHERE b.num IS NULL
Σχετικά με το 2ο ερώτημα, αλλάζοντας το DATEDIFF(CURDATE(), DATE(b.date)) με τον τυχαίο αριθμό 5, έχουμε το παρακάτω:

Κώδικας: Επιλογή όλων

&#40;5 <= 190 AND 5 >= 360&#41; OR 
&#40;5 <= 90  AND 5 >= 190&#41; OR 
&#40;5 <= 0   AND 5 >= 90&#41;
Όπως θα διαπιστώσεις, δε γίνεται να ικανοποιηθεί κάποια συνθήκη. Επίσης, επειδή η MySQL δεν υποστηρίζει function-based indexes, είναι προτιμότερο να τροποποιήσεις το query σε κάτι τέτοιο και να φτιάξεις ανάλογα τα indexes:

Κώδικας: Επιλογή όλων

WHERE b.date BETWEEN MIN_DATE_HERE AND MAX_DATE_HERE

Απάντηση

Επιστροφή στο “MySQL”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες