来自多个表的数据返回到许多记录

时间:2016-08-23 06:57:44

标签: sql sql-server

我正在尝试从不同的表中获取数据。 下面是表结构和值以及我到目前为止所尝试的内容。

uploadtable
uploadId    doctypeId
1             1
2             1

MetadataTable
Id   doctypeId   contentLable   controlType   fieldtype  
1       1        docnumber       Textbox       varchar
2       1        expiryDate      Textbox       Datetime

contentTable
Id   uploadId  doctypeId    Label        Value
1       1        1          docnumber    123
2       1        1          expiryDate   1/1/2016

当我将uploadId作为1传递给where条件时,Output应为

uploadId  contentLable  controlType  fieldtype  Label        Value
1         docnumber      Textbox     varchar    docnumber    123
1         expiryDate     Textbox     Datetime   expiryDate   1/1/2016

实际上我在我的sql server中试过如下。其实我需要linq查询。如果我在sql中得到正确的输出,那么我想把它转换成linq。

select
    upd.uploadId,
    meta.contentLable,
    meta.controlType,
    meta.fieldtype,
    content.Label,
    content.value
from MetadataTable meta,
    contentTable content,
    uploadtable upd
where upd.uploadId = content.uploadId 
and meta.doctypeId = content.doctypeId 
and upd.uploadId = 1

我输出的输出不正确如下。

uploadId  contentLable  controlType  fieldtype  Label        Value
1         docnumber      Textbox     varchar    docnumber    123
1         docnumber      Textbox     varchar    expiryDate   1/1/2016
1         expiryDate     Textbox     Datetime   docnumber    123
1         expiryDate     Textbox     Datetime   expiryDate   1/1/2016

1 个答案:

答案 0 :(得分:0)

希望这会有所帮助。我认为这个sql应该执行你需要的东西:

join
  1. 避免使用contentTable从多个表中进行选择 - 使用恰当的uploadId语法 - 它会使您的查询更具可读性并减少忘记加入条件的机会。
  2. 加入doctypeId时,您还需要Cartesian joincross join加入 - 否则您会得到像您这样的<ul class="et_pb_tabs_controls clearfix"> <li class="et_pb_tab_0"><a href="#">Sat 1st Service</a></li> <li class="et_pb_tab_1"><a href="#">Sat 2nd Service</a></li> <li class="et_pb_tab_2"><a href="#"></a></li> <li class="et_pb_tab_3"><a href="#">Sun 2nd Service</a></li> <li class="et_pb_tab_4"><a href="#"></a></li> <li class="et_pb_tab_5"><a href="#">test</a></li> </ul> / stream没有。