SQL where clause
- Swtos
- Kilobyte level
- Posts: 309
- Joined: Mon Apr 18, 2005 4:52 pm
- Academic status: MSc
- Gender: ♂
- Location: Δ.Π
SQL where clause
Θέλω να κάνω το εξής στον SQL Server 2005:
Να κάνω DECLARE μια μεταβλητη varchar(...) και μετά να την κανω SET με μία τιμή όπως 'Χ>4 AND Υ>8'. Έπειτα να εκτελέσω ένα query της μορφής,
SELECT ...
FROM ...
WHERE @μεταβλητή
Αυτό όμως μου πετά error "An expression of non-boolean type specified in a context where a condition is expected" το οποίο ειναι μεν λογικό καθώς η μεταβλητη είναι varchar.
Ξερει κανεις αν και πως μπορώ να κανω κατι τετοιο, δηλαδη στο where απλα να εισαγω το όνομα μιας μεταβλητης?
Ευχαριστώ!
Να κάνω DECLARE μια μεταβλητη varchar(...) και μετά να την κανω SET με μία τιμή όπως 'Χ>4 AND Υ>8'. Έπειτα να εκτελέσω ένα query της μορφής,
SELECT ...
FROM ...
WHERE @μεταβλητή
Αυτό όμως μου πετά error "An expression of non-boolean type specified in a context where a condition is expected" το οποίο ειναι μεν λογικό καθώς η μεταβλητη είναι varchar.
Ξερει κανεις αν και πως μπορώ να κανω κατι τετοιο, δηλαδη στο where απλα να εισαγω το όνομα μιας μεταβλητης?
Ευχαριστώ!
-My father made him an offer he couldnt refuse
-What was that?
-Luca Brasi held a gun to his head and my father assured him that either his brain or his signature would be on the contract
-The Godfather
-What was that?
-Luca Brasi held a gun to his head and my father assured him that either his brain or his signature would be on the contract
-The Godfather
- Swtos
- Kilobyte level
- Posts: 309
- Joined: Mon Apr 18, 2005 4:52 pm
- Academic status: MSc
- Gender: ♂
- Location: Δ.Π
To θέμα είναι πως το κομματι <όνομα_στήλης_της _μεταβλητής> = <τιμή_που_θες> είναι αποθηκευμένο σε μία μεταβλητη. Θέλω να βάλω αυτή τη μεταβλητή στο where και οχι καθε ονομα και τιμη μεταβλητής...ευχαριστώ παντως... 

-My father made him an offer he couldnt refuse
-What was that?
-Luca Brasi held a gun to his head and my father assured him that either his brain or his signature would be on the contract
-The Godfather
-What was that?
-Luca Brasi held a gun to his head and my father assured him that either his brain or his signature would be on the contract
-The Godfather
Α, τώρα κατάλαβα.
Θα πρότεινα κάτι άλλο. Να είχες 2 μεταβλητές (π.χ. a, b) στις οποίες θα αποθήκευες τις τιμές 4 και 2 που έχεις παραπάνω και μετά θα έκανες κάτι της μορφής:
Φαντάζομαι τα X και Y είναι ονόματα στηλών, έτσι; Δε σε βολεύει κάτι τέτοιο;
Θα πρότεινα κάτι άλλο. Να είχες 2 μεταβλητές (π.χ. a, b) στις οποίες θα αποθήκευες τις τιμές 4 και 2 που έχεις παραπάνω και μετά θα έκανες κάτι της μορφής:
Code: Select all
Where X>@a AND Y>@b
Είμαι ένας μοναχικός cowboy...
- Swtos
- Kilobyte level
- Posts: 309
- Joined: Mon Apr 18, 2005 4:52 pm
- Academic status: MSc
- Gender: ♂
- Location: Δ.Π
Αυτό το εχω σκεφτεί απλα στην περιπτωσή μου είναι μαλλον πολυ πολυπλοκο να το κανω. Βασικά εχω έναν πινακα Α ο οποιός έχει μία στήλη varchar(...). Ουσιαστικά σκανάρω αυτή την στήλη με έναν cursor και παιρνω καθε φορά κατι της μορφής 'X>5 AND r>7'. Δηλαδή σε κάθε πέρασμα δεν ξερώ ούτε πόσα ουτε ποια Χ,Υ, κτλ θα συναντήσω. Αυτο το 'X>5 AND r>7' θέλω να το χρησιμοποιήσω αυτούσιο στο WHERE clause ενός query σε εναν άλλο πίνακα Β ο οποίος έχει για στήλες όλα τα πιθανα Χ, Υ, κτλ. Βασικά μαλλον δε πρεπει να γίνεται απο όσο το εψαξα...ευχαριστω και παλι...
-My father made him an offer he couldnt refuse
-What was that?
-Luca Brasi held a gun to his head and my father assured him that either his brain or his signature would be on the contract
-The Godfather
-What was that?
-Luca Brasi held a gun to his head and my father assured him that either his brain or his signature would be on the contract
-The Godfather
- tsilochr
- Wow! Terabyte level
- Posts: 3246
- Joined: Tue Mar 16, 2004 2:47 pm
- Academic status: PhD
- Gender: ♂
- Location: mm.aueb.gr
- Contact:
σε MS SQL Server 2000 χρησιμοποιούσα την sp_executesql για να τρέχω queries που χτίζοταν δυναμικά
για κοίτα -> http://msdn2.microsoft.com/en-us/library/ms188001.aspx
για κοίτα -> http://msdn2.microsoft.com/en-us/library/ms188001.aspx
- Spy
- Kilobyte level
- Posts: 443
- Joined: Mon Dec 12, 2005 9:40 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Ε-75, Ε-65, Ε-90
- Contact:
Re: SQL where clause
Εχω αυτους του 3 πινακες
σε βάση My-SQL
Θέλω να βρω τους Client έχουν εγγραφές στο csecurity
και αυτούς που δεν εχουν.....
Πώς μπορώ να κάνω το Query.... Ξέρει κανένας;
Code: Select all
CREATE TABLE `Client` (
`cid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`csurname` VARCHAR( 40 ) NULL
) ENGINE=INNODB;
CREATE TABLE `Order` (
`orderID` INT NOT NULL AUTO_INCREMENT ,
`cID` INT NOT NULL ,
`oaddress` VARCHAR( 40 ) NULL ,
INDEX cus_id (`cID`),
PRIMARY KEY ( `orderID` ),
FOREIGN KEY (`cID`) REFERENCES `Client` (`cID`)
ON DELETE CASCADE
) ENGINE=INNODB ;
CREATE TABLE `csecurity` (
`securityID` INT NOT NULL AUTO_INCREMENT ,
`oID` INT NOT NULL ,
`secCode` VARCHAR( 40 ) NOT NULL ,
INDEX orsec_id (`oID`),
PRIMARY KEY ( `securityID`),
FOREIGN KEY (`oID`) REFERENCES `Order` (`orderID`)
ON DELETE CASCADE
) ENGINE=INNODB;
Θέλω να βρω τους Client έχουν εγγραφές στο csecurity
και αυτούς που δεν εχουν.....
Πώς μπορώ να κάνω το Query.... Ξέρει κανένας;
-
- Venus Former Team Member
- Posts: 7561
- Joined: Thu Oct 27, 2005 1:43 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Boston, MA
Re: SQL where clause
Code: Select all
SELECT DISTINCT client.csurname FROM Client, Order, csecurity
WHERE csecurity.oID == Order.orderID AND Order.cID == Client.cID
- Spy
- Kilobyte level
- Posts: 443
- Joined: Mon Dec 12, 2005 9:40 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Ε-75, Ε-65, Ε-90
- Contact:
Re: SQL where clause
Ναι αυτό είναι...(ευχαριστώ) αλλά για το ερώτημα "όσους δεν έχουν εγγραφές, το EXCEPT δεν λειτουργει σε MY-SQL...The Punisher wrote:κάτι τέτοιο;Code: Select all
SELECT DISTINCT client.csurname FROM Client, Order, csecurity WHERE csecurity.oID == Order.orderID AND Order.cID == Client.cID
Code: Select all
SELECT DISTINCT client.csurname FROM `Client`
EXCEPT
SELECT DISTINCT client.csurname FROM `Client`, `Order`, `csecurity`
WHERE (csecurity.oID = Order.orderID AND Order.cID = Client.cID)
Σε My-SQL πως μπορώ να αφαιρέσω κάποια αποτελέσματα;
Re: SQL where clause
Αν και έχω πολύ καιρό να ασχοληθώ με SQL δε δουλεύει με το παραπάνω απλά αντικαθιστώντας τα == με <>; Ή μπορεί να χρειάζεται μόνο το κομμάτι πριν το AND αυτή την αλλαγή για να αποκλείσεις τις εγγραφές που σχετίζονται μόνο με το csecurity.
Ελπίζω να μην είπα βλακεία...
Ελπίζω να μην είπα βλακεία...

Είμαι ένας μοναχικός cowboy...
- Spy
- Kilobyte level
- Posts: 443
- Joined: Mon Dec 12, 2005 9:40 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Ε-75, Ε-65, Ε-90
- Contact:
Re: SQL where clause
Luke wrote:Αν και έχω πολύ καιρό να ασχοληθώ με SQL δε δουλεύει με το παραπάνω απλά αντικαθιστώντας τα == με <>; Ή μπορεί να χρειάζεται μόνο το κομμάτι πριν το AND αυτή την αλλαγή για να αποκλείσεις τις εγγραφές που σχετίζονται μόνο με το csecurity.
Ελπίζω να μην είπα βλακεία...

- Zifnab
- Venus Former Team Member
- Posts: 7581
- Joined: Tue Nov 15, 2005 2:42 am
- Academic status: MSc
- Gender: ♂
- Location: Connecticut
- Contact:
Re: SQL where clause
Στην mySQL δεν υπάρχει except και minus...
Οπότε οι τρείς λυσεις που προτείνονται στα fora είναι:
με self-join exclusion
με not-in
ή με left join (?)
Για googlise μήπως βρείς κάτι σχετικό με αυτά...
Οπότε οι τρείς λυσεις που προτείνονται στα fora είναι:
με self-join exclusion
με not-in
ή με left join (?)
Για googlise μήπως βρείς κάτι σχετικό με αυτά...
