私は最初にSELECT
を指定して、特定の電子メールのすべてのユニークなダッシュボードを返すことを目指しています。一致する外部キー値を持つ一意のオブジェクトを返す方法はありますか?
次に、固有のダッシュボードのIDと一致する関連するチャートとKPI外部キーを返すためにSELECT
を返します。
だから私が試したのは、UNION
を2つの選択の間に使用して、エラーAll queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists
を与えていることです。
ここではcome across a similar issueでしたが、selectの間に偶数の列値を追加する方法は、この状況には適していません。
質問:
あなたが外部キー値に一致するとユニークなオブジェクトを返すことができますどのように?
これは私が思い付いた現在の手順があるが、私はより良い選択肢に開いている:
ALTER PROCEDURE [dbo].[GetUserProfile]
@p_email VARCHAR(100)
AS
BEGIN
SELECT UserName, Email, Dashboard_Name, RID from [dbo].[User]
inner join [dbo].[Dashboard] on
[Dashboard].[USER_ID]=[User].Email
and [email protected]_email
UNION
SELECT KPI_Name, Chart_Name FROM [KPI]
inner join [dbo].[Chart] on
[Chart].[KPI_ID]=[KPI].ID
END
また、これは4つのテーブルの要旨は、外部キー制約を簡潔にするため削除されました。
TABLE [dbo].[User](
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserName] [varchar](50) NOT NULL,
[Email] [varchar](80) NOT NULL,
TABLE [dbo].[Dashboard](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Dashboard_Name] [varchar](100) NOT NULL,
[RID] [nvarchar](255) NOT NULL,
[USER_ID] [varchar](80) NOT NULL
TABLE [dbo].[KPI](
[ID] [int] IDENTITY(1,1) NOT NULL,
[KPI_Name] [varchar](100) NOT NULL,
[DashboardID] [int] NOT NULL,
TABLE [dbo].[Chart](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Chart_Name] [varchar](100) NOT NULL,
[KPI_ID] [int] NOT NULL,
クエリが正しいのであれば、これは予想される結果になります:
{
UserName:"brian",
Email:"[email protected]",
Dashboard_Name:"test dash 1",
RID:"2003",
DashboardID:1,
KPI_Name:"test kpi 1",
KPI_ID:1,
Chart_ID:1,
Chart_Name:"ch1, ch2, ch3"
},
{
UserName:"brian",
Email:"[email protected]",
Dashboard_Name:"test dash 2",
RID:"2003",
DashboardID:2,
KPI_Name:"test kpi 2",
KPI_ID:2,
Chart_ID:2,
Chart_Name:"ch4, ch5, ch6"
},