3

SQL Server に 3 つのテーブルがあります

1.) 列の登録

   Reg_Id     bigint, primary key and auto increment
   Name       nvarchar(50),
   Tranx_id   nvarchar(30),
   Email      nvarchar(30),
   Username   nvarchar(30),
   Password   nvarchar(30),
   Edition_Id nvarchar(50),
   Default_Id nvarchar(50),
   Reg_Date   datetime,
   usertype   nvarchar(50),

2.) AllEditionPages それは列です

Page_id       bigint, primary key and auto increment
edition_date  datetime,
noofpages     int,
Page_no     int,
image_path  nvarchar(50),
Active   int,
type_of_page  varchar(50),
Image_Width  int,
Image_Height int,

3.) エディション

id  int, primary key and auto increment
edition_date  datetime,
noofpages  int,
XMLFile  nvarchar(50),
PDFFile  nvarchar(50),
PDFPrefix nvarchar(50),
type   nvarchar(50),
price  nvarchar(50),
reg_req nvarchar(50)

上記の表に従って、SQLクエリの下で試します

    SELECT edi.*, aep.*, reg.*
    FROM Edition as edi INNER JOIN Registration as reg 
    ON edi.id = reg.Edition_Id INNER JOIN AllEditionPages as aep
    ON edi.edition_date = aep.edition_date
    where reg.Edition_Id= edi.id
    and reg.Reg_ID = 14

このクエリから、次の出力が得られます。

id    edition_date              type    price  page-id

96    2012-07-18 00:00:00.000   free    null    2503
96    2012-07-18 00:00:00.000   free    null    2503

出力は 2 行ですが、出力には 1 行だけが必要です

4

3 に答える 3

1

common table expressionこのシナリオでは、次の方法で使用できます。

 WITH cteTable AS
    (
        SELECT edi.*, aep.*, reg.*
        FROM Edition as edi INNER JOIN Registration as reg 
        ON edi.id = reg.Edition_Id INNER JOIN AllEditionPages as aep
        ON edi.edition_date = aep.edition_date
        where reg.Edition_Id= edi.id
        and reg.Reg_ID = 14
    )
    select top 1 * from cteTable 

2 つのテーブルに edition_date が含まれているため、次のように「*」を使用する代わりに列名を指定する必要があります。

WITH cteTable AS
    (
        SELECT edi.id,edi.edition_date,edi.noofpagez,edi.XMLFile,edi.PDFFile ,edi.PDFPrefix,edi.type,edi.price,edi.reg_req ,
        aep.Page_id, aep.edition_date,aep.noofpages,aep.Page_no,aep.image_path,aep.Active,aep.type_of_page,aep.Image_Width,aep.Image_Height,
        reg.Reg_Id,reg.Name,reg.Tranx_id,reg.Email,reg.Username,reg.Password,reg.Edition_Id,reg.Default_Id,reg.Reg_Date,reg.usertype
        FROM Edition as edi INNER JOIN Registration as reg 
        ON edi.id = reg.Edition_Id INNER JOIN AllEditionPages as aep
        ON edi.edition_date = aep.edition_date
        where reg.Edition_Id= edi.id
        and reg.Reg_ID = 14
    )
    select top 1 * from cteTable 
于 2012-07-21T11:26:07.887 に答える
0

1行を指定する必要があります.putputからは、データが重複しているように見えます.それが問題である場合は、distinctを使用して個別の行を取得する必要があります..そうでない場合は、必要なものを正確に指定してください.

于 2012-07-21T12:15:27.370 に答える
0

2 つの行に同じ値がある場合は、個別の選択を使用できます。またはLIMIT 0,1、クエリの背後で簡単に使用できます。

于 2012-07-21T11:37:48.527 に答える