Προς το περιεχόμενο

show all duplicates rows sql


Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα,

 

Έχω ένα πίνακα(exercise) όπου θέλω να πάρω ως αποτέλεσμα μόνο τις διπλοεγγραφές με ίδιο id_exercise.

 

Έχω δημιουργήσει αυτό το query

$sql1 = "SELECT * FROM sortable_exer a join (SELECT id_exercise,id_cooperation,id_Statement,dateStar FROM exercise WHERE number_priority=1 group by id_exercise having count(*)>1) b on a.id_exercise=b.id_exercise"; 

σύμφωνα με αυτό που βρήκα εδώ http://stackoverflow.com/questions/10324107/show-all-duplicated-rows

αλλά τα πράγματα δεν πήγαν όπως θα ήθελα. Καμία ιδέα για το πώς μπορώ να το διορθώσω;

Ευχαριστώ.

Δημοσ.

Όπως έκανε ο OP στο stack overflow, δώσε κι εσύ ένα παράδειγμα που να περιέχει το schema της βάσης σου (τα κομμάτια που μας ενδιαφέρουν) και ένα δείγμα δεδομένων.

Δημοσ.

Όπως έκανε ο OP στο stack overflow, δώσε κι εσύ ένα παράδειγμα που να περιέχει το schema της βάσης σου (τα κομμάτια που μας ενδιαφέρουν) και ένα δείγμα δεδομένων.

Έχω αυτόν τον πίνακα 

 

id_statement | id_exercise | number_priority
1213                  4116            1
1214                  4116            1
1215                  7263            1
κτλ

 
 

το id_statement είναι το κλειδί του πίνακα. Αυτό που θέλω είναι να πάρω τις γραμμές όπου το number_priority είναι 1 και το id_exercise εμφανίζεται πάνω από μία φορά. Δηλαδή τις 2 πρώτες γραμμές του πίνακα  σε αυτό το παράδειγμα.

Δημοσ.

Πιθανότατα να υπάρχει και πιο efficient τρόπος, αλλά τέτοια ώρα τέτοια λόγια, οπότε να δύο ιδέες για το προς τα που μπορείς να κινηθείς:

SELECT *
FROM `exercises`
WHERE `id_exercise` IN (
  SELECT `id_exercise`
  FROM `exercises`
  GROUP BY `id_exercise`
  HAVING COUNT(`id_exercise`) > 1
)
AND `number_priority` = 1

fiddle

SELECT `table_a`.*
FROM `exercises` as `table_a`
INNER JOIN `exercises` as `table_b`
ON `table_a`.`id_exercise` = `table_b`.`id_exercise`
GROUP BY `table_b`.`id_statement`
HAVING COUNT(`table_b`.`id_statement`) > 1

fiddle

Δημοσ.

Φίλε το πρώτο και το δεύτερο μου τυπώνουν ναι μεν τις διπλοεγγραφές, αλλά μου τυπώνουν και γιαυτά τα οποία το count('id_exercise')=1 για κάποιο περιέργο λόγο.

 

Δοκίμασα και εγώ το fiddle βάζοντας και άλλες τιμές και δούλευε μια χαρά.

 

Μου εμφανίζει το count('id_exercise')=1  γιατί υπάρχουν  id_exercise και σε άλλες γραμμές αλλά με number_priority >1.Δηλαδή κάτι τέτοιο, από τι κατάλαβα.

 

 

ιd_statement | id_exercise | number_priority

29184                6533                1

267722              6533                2

Δημοσ.

Ναι, ξέχασα αρχικά να βάλω τον έλεγχο για το number_priority και μετά τον έβαλα στα γρήγορα μόνο στο πρώτο και αυτό σε λάθος σημείο. Πρέπει να μπει μέσα στο subquery:

SELECT *
FROM `exercises`
WHERE `id_exercise` IN (
  SELECT `id_exercise`
  FROM `exercises`
  WHERE `number_priority` = 1
  GROUP BY `id_exercise`
  HAVING COUNT(`id_exercise`) > 1
)

fiddle

SELECT `table_a`.*
FROM `exercises` as `table_a`
INNER JOIN `exercises` as `table_b`
ON `table_a`.`id_exercise` = `table_b`.`id_exercise`
WHERE `table_b`.`number_priority` = 1
GROUP BY `table_b`.`id_statement`
HAVING COUNT(`table_b`.`id_statement`) > 1

fiddle

Δημοσ.

Μια χαρά αυτό, αλλά μου εμφανίζει και τις γραμμές όπου το number_priority>1

Δηλαδή

 

ιd_statement | id_exercise | number_priority

 

1213                   4116             1

1222                   4116             1

1414                   4116            3

Δημοσ.

Στα fiddles που έδωσα δεν το κάνει, αγνοεί το 8888 που έχει τρεις εγγραφές, αλλά το number_priority του είναι 2.

 

edit: άκυρο, τώρα πρόσεξα πως υπάρχουν διαφορετικά priorities στο ίδιο id_exercise. Θα το κοιτάξω αργότερα όταν βρω χρόνο. Αν εν τω μεταξύ βρεις λύση, post-αρέ την.

Δημοσ.

Στα fiddles που έδωσα δεν το κάνει, αγνοεί το 8888 που έχει τρεις εγγραφές, αλλά το number_priority του είναι 2.

 

edit: άκυρο, τώρα πρόσεξα πως υπάρχουν διαφορετικά priorities στο ίδιο id_exercise. Θα το κοιτάξω αργότερα όταν βρω χρόνο. Αν εν τω μεταξύ βρεις λύση, post-αρέ την.

Φίλε έβαλα το  `number_priority` = 1 και   έξω από την παρένθεση και δούλεψε μια χαρά..!!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...