webForumDet fria alternativet

Ändra villkor om inte första finns

Databaser & SQL

2 svar · 239 visningar · startad av Dino

Medlem sedan sep. 20011 914 inlägg
Frågan#1

Har två tabeller.

CREATE TABLE [Table1] 
(
   [Id] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
   [Number] [varchar] (50) COLLATE Finnish_Swedish_CI_AS NOT NULL ,
   [TimeStamp] [smalldatetime] NOT NULL CONSTRAINT [DF_Table1_TimeStamp] DEFAULT (getdate()),
   CONSTRAINT [PK_Table1] PRIMARY KEY  CLUSTERED 
   (
      [Id]
   )  ON [PRIMARY] 
) ON [PRIMARY]
GO

CREATE TABLE [Table2] 
(
   [Id] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
   [Table1Id] [int] NOT NULL ,
   [LingoId] [int] NOT NULL ,
   [Header] [nvarchar] (150) COLLATE Finnish_Swedish_CI_AS NOT NULL ,
   [Description] [ntext] COLLATE Finnish_Swedish_CI_AS NOT NULL ,
   CONSTRAINT [PK_Table2] PRIMARY KEY  CLUSTERED 
   (
      [Id]
   )  ON [PRIMARY] ,
   CONSTRAINT [FK_Table2_Table1] FOREIGN KEY 
   (
      [Table1Id]
   ) REFERENCES [Table1] (
      [Id]
   )
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

Vad jag skulle vilja är att om LingoId = 2 i nedan fråga inte finns så skall den istället ta ut där LingoId = 1 som alltid finns. Går detta?

SELECT
   dbo.Table1.Id, 
   dbo.Table1.Number, 
   dbo.Table1.[TimeStamp], 
   dbo.Table2.Header, 
   dbo.Table2.Description
FROM         
   dbo.Table1 
      LEFT OUTER JOIN
         dbo.Table2 ON dbo.Table1.Id = dbo.Table2.Table1Id
WHERE
   (dbo.Table2.LingoId = 2) --Sen behövs det då något här.
Medlem sedan dec. 200012 464 inlägg
#2

Varför har du en left join?

SELECT
   dbo.Table1.Id, 
   dbo.Table1.Number, 
   dbo.Table1.[TimeStamp], 
   dbo.Table2.Header, 
   dbo.Table2.Description
FROM         
   dbo.Table1 
      INNER JOIN
         dbo.Table2 ON dbo.Table1.Id = dbo.Table2.Table1Id
WHERE
   dbo.Table2.LingoId = 2
  or (dbo.Table2.LingoId = 1
 and not exists
   (select *
      from table2 cn 
     where cn.table1id = dbo.Table2.Table1Id
       and cn.lingoid = 2)
Medlem sedan sep. 20011 914 inlägg
#3

Ingen aning varför jag använde left join. Är i alla fall ändrat och resultatet är det önskade.

Ett jätte tack. :)

336 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
204 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
208 ms — ändringar (db)