【问题标题】:Nested sub-query to select from more than tow table嵌套子查询从两个以上的表中选择
【发布时间】:2013-03-21 11:01:33
【问题描述】:

我有三张桌子:

Years (YearId,Year)
Months (MonthID,Month)
Date (DateID,YearID,MonthID)
Client (CLientID,ClientName)
Payment (PayID,ClientID,DateID,Amount)

我要填写DataGridView为:

Client Name, Amount, Year, Month 

我使用了这个语句,但它不起作用:

Select * From (select Year From Years Where YearID = (Select YearId From Date Where dateID = (Select DateID From Payment))),(Select Month From Months Where Monthid = (Select MonthID From Date Where dateID = (Select DateID From Payment))),(Select ClientName From Client Where ClientID = (Select ClientID From Payment),(Select amont From Payment)

【问题讨论】:

  • 请定义“它不起作用”。您是否收到错误消息?此外,您说您有 3 张桌子,但您说的是 5 张桌子!顺便问一下,你听说过sql join吗?

标签: c# sql data-binding datagridview oracle10g


【解决方案1】:

听起来你只是想使用INNER JOINs

SELECT C.ClientName,
    P.Amount,
    Y.Year,
    M.Month
FROM Payment P
    INNER JOIN Client C 
        ON P.ClientID = C.ClientID
    INNER JOIN Date D 
        ON P.DateId = D.DateId
    INNER JOIN Years Y
        ON D.YearId = Y.YearId
    INNER JOIN Months M
        ON D.MonthId = M.MonthId

请参阅下面的JOINs 的良好视觉表示:

Visual representation of JOINS

【讨论】:

  • 我认为这是一个更好的解释:codinghorror.com/blog/2007/10/…
  • @sgeddes 它的工作现在非常感谢您
  • @MohamedHmmam -- np,很高兴我能帮上忙!
  • @sgeddes 我可以在 Y.Year=@Yvar And M.Month=@Mvar 的代码之后这样做
  • SELECT C.ClientName, P.Amount, Y.Year, M.Month FROM Payment P INNER JOIN Client C ON P.ClientID = C.ClientID INNER JOIN Date D ON P.DateId = D。 DateId INNER JOIN Years Y ON D.YearId = Y.YearId INNER JOIN Months M ON D.MonthId = M.MonthId where Y.Year=@Yvar And M.Month=@Mvar
猜你喜欢
  • 1970-01-01
  • 2017-08-10
  • 2020-06-24
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多