Sql Server una query che non riesco a costruire

mercoledì 05 novembre 2008 - 11.00

Angel_Dark75 Profilo | Newbie

Buongiorno e scusate l'intrusione, ho un problema e sono 2 giorni che non riesco a risolverlo.

Il problema è che devo costruire una query ma non so proprio dove cercare e cosa cercare...
in breve io ho due tabelle Ordini e Commesse dove come PK in commesse ho IdCommessa che è anche FK in Ordini
mentre in Ordini c'è IdOrder come PK.

Se una Commessa viene impegnata finisce il suo IdCommessa finisce in Ordini associata a IdOrder.
Ecco io adesso vorrei visualizzare tutti le entità di una Commessa e se la stessa Commessa risulta in Ordini
vedere anche quei campi.
Ho provato con la join ma riesco a visualizzare o solo IdCommessa che sono Ordini oppure solo IdCommessa
che non sono impegnate...

Spero di essere riuscito a spiegarmi bene...

alx_81 Profilo | Guru

>Buongiorno e scusate l'intrusione, ho un problema e sono 2 giorni
>che non riesco a risolverlo.
Ciao!

>Ho provato con la join ma riesco a visualizzare o solo IdCommessa
>che sono Ordini oppure solo IdCommessa
>che non sono impegnate...
Dovresti postare le CREATE delle tabelle e il risultato di esempio che vuoi ottenere.
Inoltre, che RDBMS utilizzi?

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Angel_Dark75 Profilo | Newbie

allora le CREATE sono queste:

CREATE TABLE [dbo].[CommesseA](
[IdCommessa] [int] IDENTITY(1,1) NOT NULL,
[Commessa] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[Kit] [int] NOT NULL,
[RCO] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[Tipo] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[Mt] [int] NOT NULL,
[Qta] [int] NOT NULL,
[Situazione] [int] NULL,
[Note] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
CONSTRAINT [PK_CommesseA] PRIMARY KEY CLUSTERED
(
[IdCommessa] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]


CREATE TABLE [dbo].[Ordini](
[IdOrder] [int] IDENTITY(1,1) NOT NULL,
[IdCommessa] [int] NOT NULL,
[IdCavo] [int] NOT NULL,
[Prelevare] [int] NOT NULL CONSTRAINT [DF_Ordini_Prelevati] DEFAULT ((0)),
[Ubicazione] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL CONSTRAINT [DF_Ordini_Ubicazione] DEFAULT ((0)),
[Box] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL CONSTRAINT [DF_Ordini_Box] DEFAULT ((0)),
CONSTRAINT [PK_Ordini] PRIMARY KEY CLUSTERED
(
[IdOrder] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

Con RDBMS che cosa intendi?!

Comunque sono a riuscito ad ottenere il risultato ma non sono proprio sicuro se sia corretta la sintassi...

SELECT CommesseA.IdCommessa, CommesseA.Commessa, CommesseA.Kit, CommesseA.RCO, CommesseA.Tipo, CommesseA.Mt, CommesseA.Qta,
CommesseA.Situazione,Ordini.Prelevare,Ordini.Ubicazione,Ordini.Box, CommesseA.Note
FROM MagazzinoARP.dbo.CommesseA Left JOIN
MagazzinoARP.dbo.Ordini ON CommesseA.IdCommessa = Ordini.IdCommessa
WHERE (CommesseA.Commessa = '2991450')

Grazie mille!!

alx_81 Profilo | Guru

>Con RDBMS che cosa intendi?!
Sembra che il tuo sia SQL Server

Relational Data Base Management System.
http://it.wikipedia.org/wiki/RDBMS


>Comunque sono a riuscito ad ottenere il risultato ma non sono
>proprio sicuro se sia corretta la sintassi...
Con quello che hai scritto nella select ottieni tutti i record di CommesseA indipendentemente dal fatto che esistano Ordini dove la commessa vale '2991450'.
A te servono tutti gli Ordini indipendentemente dall'esistenza della CommessaA oppure il viceversa?

>Grazie mille!!
di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Angel_Dark75 Profilo | Newbie

Con RDBMS pensavo che mi chiedessi il tipo di relazione delle tabelle (1-1, 1-N...)

Il risultato è quello che io volevo e cioè ottenere tutte le Commesse indipendentemente da Ordini, ma non so se è corretto perchè adesso DB contiene pochi dati, ma già nel giro di un mese aumenteranno e non vorrei ritrovarmi il server piantato per una query... (rischio la sodomizzazione )

alx_81 Profilo | Guru

>Il risultato è quello che io volevo e cioè ottenere tutte le
>Commesse indipendentemente da Ordini, ma non so se è corretto
>perchè adesso DB contiene pochi dati, ma già nel giro di un mese
>aumenteranno e non vorrei ritrovarmi il server piantato per una
>query... (rischio la sodomizzazione )
Sintatticamente la LEFT JOIN fatta così è corretta, logicamente pure.
Per quanto riguarda le prestazioni, il discorso è diverso. Hai indicizzato le tabelle? Se sì, quali hai fatto? Su che campi?
Quali altri accessi e tipi di accesso possono essere fatti su quelle tabelle?
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5