ms sql - joins

Συζητήσεις για τον Microsoft SQL Server

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

Απάντηση
dini
Δημοσιεύσεις: 5
Εγγραφή: 26 Μάιος 2006 11:46

ms sql - joins

Δημοσίευση από dini » 26 Μάιος 2006 11:55

Καλημέρα παιδιά!
ΔΕν ξέρω αν μπορεί κάποιος να με βοηθήσει... έχω τρομερό πρόβλημα με τα joins!
Πιο συγκεκριμένα, δεν καταλαβαίνω τι είναι το inner και τι το outer join!
Πως λειτουργούν;
Πως συντάσσονται;
Ποια η διαφορά τους;
Η βοήθεια σας είναι πολύτιμη.... Τώρα μαθαίνω την ms sql λόγω πτυχιακής και έχω πελαγώσει!
Ευχαριστώ προκαταβολικά!


dini
Δημοσιεύσεις: 5
Εγγραφή: 26 Μάιος 2006 11:46

ms sql - joins

Δημοσίευση από dini » 29 Μάιος 2006 13:36

Σε ευχαριστώ πάρα πολύ. :) Τα διάβασα αυτά που μου έστειλες και μπήκα λίγο στο νόημα.
Τώρα έχω το εξής πρόβλημα: Θέλω να ενώσω 5 πινακες.
Μέχρι στιγμής έχω καταφέρει να ενώσω τον πίνακα Customer με τον Order_Cust.
Και τον Category με τον Product και με τον Order_Cust_Details.
Και τα 2 ερωτήματα βγάζουν σωστά αποτελέσματα.
Πως μπορώ να ενώσω τα 2 αυτά ερωτήματα σε ένα????
Προσπάθησα να το υλοποιήσω αλλά κάνω λάθη..

Έχω φτιάξει τα εξής:

SELECT Order_Cust.Order_Cust_No,Order_Cust.Order_Ccode,Order_Cust.Order_Cust_date,Order_Cust.Order_Cust_promised_date, Client.Csurname , Client.Cname,Client.Cafm,Client.Ctelephone
FROM Client INNER JOIN Order_Cust
ON Client.Ccode = Order_Cust.Order_Ccode
WHERE Client.Ccode = Order_Cust.Order_Ccode


SELECT Order_Cust_Details.Pcode,Order_Cust_Details.Cust_Details_quantity,Category.Catdescription,Product.Pdescription,Product.SourceCompany,Product.Value_WFPA
FROM Order_Cust_Details INNER JOIN
(Product INNER JOIN Category ON Product.Catcode = Category.Catcode)
ON Order_Cust_Details.Pcode = Product.Pcode
WHERE Order_Cust_Details.Pcode = Product.Pcode AND Product.Catcode = Category.Catcode


Kαι οι πίνακες μου είναι οι εξής:
CREATE TABLE Client
(
Csurname VARCHAR(20) NOT NULL,
Cname VARCHAR(30) NOT NULL,
Ccode BIGINT NOT NULL,
Cafm VARCHAR(11) NOT NULL,
Caddress VARCHAR(30) NOT NULL,
Ccity VARCHAR(25) NOT NULL,
Ctelephone VARCHAR(11) NOT NULL,
primary key (Ccode)
)

CREATE TABLE Category
(
Catcode BIGINT NOT NULL,
Catdescription VARCHAR(50) NOT NULL,
Primary key (Catcode)
)

CREATE TABLE Product
(
Pcode BIGINT NOT NULL,
Pdescription VARCHAR(50) NOT NULL,
Pconstruction_date DATETIME NULL,
Pattribute VARCHAR(30) NOT NULL,
Value_WFPA BIGINT NOT NULL,
Fpa BIGINT NOT NULL,
SourceCompany VARCHAR(30) NOT NULL,
Fund BIGINT NOT NULL,
Catcode BIGINT NOT NULL,
primary key (Pcode),
Foreign key(Catcode) references Category(Catcode)
)

CREATE TABLE Order_Cust
(
Order_Cust_No INT NOT NULL IDENTITY(1, 1),
Order_Cust_date DATETIME NOT NULL,
Order_Cust_promised_date DATETIME NOT NULL,
Order_Ccode BIGINT NOT NULL,
primary key (Order_Cust_No),
Foreign key(Order_Ccode) references Client(Ccode)
)

CREATE TABLE Order_Cust_Details
(
Order_Cust_No INT NOT NULL IDENTITY(1, 1),
Pcode BIGINT NOT NULL,
Cust_Details_quantity INT NOT NULL,
primary key (Order_Cust_No, Pcode),
Foreign key(Order_Cust_No) references Order_Cust (Order_Cust_No),
Foreign key(Pcode) references Product (Pcode)
)

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

ms sql - joins

Δημοσίευση από dva_dev » 29 Μάιος 2006 15:50

Στα querάκια σου είναι λάθος να χρησιμοποιείς και inner join και where με την ίδια συνθήκη. Το ένα από τα δύο αρκεί. (δεν βγάζει λάθος αποτελέσματα, αλλά χρησιμοποιείς δύο φορές την ίδια συνθήκη)

Επίσης αν γράφεις στο from τους πίνακες με τη σειρά που μπορούν να γίνουν τα joins -χρησιμοποιώντας και το αντίστοιχο tabbing- η ζωή σου θα απλουστευτεί. Για τον sql server το ίδιο κάνει.

Οπότε θα μπορούσαν να γίνουν

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

SELECT
	Order_Cust.Order_Cust_No,
	Order_Cust.Order_Ccode,
	Order_Cust.Order_Cust_date,
	Order_Cust.Order_Cust_promised_date,
	Client.Csurname,
	Client.Cname,
	Client.Cafm,
	Client.Ctelephone
FROM
	Client INNER JOIN Order_Cust ON Client.Ccode = Order_Cust.Order_Ccode
ή

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

SELECT
	Order_Cust.Order_Cust_No,
	Order_Cust.Order_Ccode,
	Order_Cust.Order_Cust_date,
	Order_Cust.Order_Cust_promised_date,
	Client.Csurname,
	Client.Cname,
	Client.Cafm,
	Client.Ctelephone
FROM
	Client,
	Order_Cust
WHERE
	Client.Ccode = Order_Cust.Order_Ccode
και

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

SELECT
	Order_Cust_Details.Pcode,
	Order_Cust_Details.Cust_Details_quantity,
	Category.Catdescription,
	Product.Pdescription,
	Product.SourceCompany,
	Product.Value_WFPA
FROM
	(Order_Cust_Details
		INNER JOIN Product ON Order_Cust_Details.Pcode = Product.Pcode
	)INNER JOIN Category ON Product.Catcode = Category.Catcode
ή

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

SELECT
	Order_Cust_Details.Pcode,
	Order_Cust_Details.Cust_Details_quantity,
	Category.Catdescription,
	Product.Pdescription,
	Product.SourceCompany,
	Product.Value_WFPA
FROM
	Order_Cust_Details,
	Product,
	Category
WHERE
		Order_Cust_Details.Pcode = Product.Pcode
	AND Product.Catcode = Category.Catcode
Για να ενώσεις τα querάκια αρκεί να βάλεις μαζί όλα τα πεδία στο select όλους του πίνακες στο from και όλες τις συνθήκες στο where. Μπορεί να γίνει κάπως έτσι:

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

SELECT
    Order_Cust.Order_Cust_No,
    Order_Cust.Order_Ccode,
    Order_Cust.Order_Cust_date,
    Order_Cust.Order_Cust_promised_date,
    Client.Csurname,
    Client.Cname,
    Client.Cafm,
    Client.Ctelephone,
    Order_Cust_Details.Pcode,
    Order_Cust_Details.Cust_Details_quantity,
    Category.Catdescription,
    Product.Pdescription,
    Product.SourceCompany,
    Product.Value_WFPA
FROM
    (
        (
            (Client
                INNER JOIN Order_Cust ON Client.Ccode = Order_Cust.Order_Ccode
            )INNER JOIN Order_Cust_Details ON Order_Cust.Order_Cust_No = Order_Cust_Details.Order_Cust_No
        )INNER JOIN Product ON Order_Cust_Details.Pcode = Product.Pcode
    )INNER JOIN Category ON Product.Catcode = Category.Catcode
ή

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

SELECT
    Order_Cust.Order_Cust_No,
    Order_Cust.Order_Ccode,
    Order_Cust.Order_Cust_date,
    Order_Cust.Order_Cust_promised_date,
    Client.Csurname,
    Client.Cname,
    Client.Cafm,
    Client.Ctelephone,
    Order_Cust_Details.Pcode,
    Order_Cust_Details.Cust_Details_quantity,
    Category.Catdescription,
    Product.Pdescription,
    Product.SourceCompany,
    Product.Value_WFPA
FROM
    Client,
    Order_Cust,
    Order_Cust_Details,
    Product,
    Category
WHERE
        Client.Ccode = Order_Cust.Order_Ccode
    AND Order_Cust.Order_Cust_No = Order_Cust_Details.Order_Cust_No
    AND Order_Cust_Details.Pcode = Product.Pcode
    AND Product.Catcode = Category.Catcode
Τουλάχιστον στο ξεκίνημα προσπάθησε να βγάζεις άκρη και μόνο με την εμφάνιση του τρόπου που τα γράφεις.

Απάντηση

Επιστροφή στο “MS SQL Server”

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

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