【问题标题】:How to write a sql query from these tables如何从这些表中编写 sql 查询
【发布时间】:2012-02-01 14:34:22
【问题描述】:

首先,我不是 SQL 开发人员。因此,我需要帮助才能从以下三个表格中检索一些信息。

我想获得namesorder dateproduct code 用于那些使用product code = 401.1201 订购产品的人

如何编写 SQL 查询以从表中检索信息?

dbo.tblMaterial

  • MaterialId(PK, int, not null)
  • CanBeOrdered(位,非空)
  • 名称(nvarchar(200),不为空)
  • 价格(十进制(18,2),不为空)
  • ProductCode(nvarchar(50), not null)

dbo.tblMaterialOrder

  • MaterialOrderId(PK, int, not null)
  • MembershipUserId(uniqueidentifyer, not null)
  • 名字(nvarchar(50),不为空)
  • 姓氏(nvarchar(100),不为空)
  • OrderDate(日期时间,非空)

dbo.tblMaterialOrderItem

  • MaterialOrderItemId(PK, int, not null)
  • MembershipUserId(uniqueidentifyer, not null)
  • ItemsCount(int, not null)
  • ItemPrice(int, not null)
  • MaterialOrder_MaterialOrderId(FK, int, not null)
  • Material_MaterialId(FK, int, not null)

我试过了……

Select * From dbo.tblMaterialOrder mo Where Exists (Select MembershipUserId From
dbo.tblMaterialOrderItem Where dbo.tblMaterialOrderItem.Material_MaterialId = 
(Select MaterialId From dbo.tblMaterial Where (ProductCode = '401.1201')))

Select * from dbo.tblMaterialOrder, dbo.tblMaterialOrderItem, dbo.tblMaterial 
Where 
dbo.tblMaterialOrderItem.Material_MaterialId = '248' And 
dbo.tblMaterialOrderItem.MaterialOrder_MaterialOrderId = 
dbo.tblMaterialOrder.MaterialOrderId

没有成功。

【问题讨论】:

  • 这是学校的工作吗?您是否尝试过编写可以与我们分享的 SQL,以便我们为您指明正确的方向?
  • 我尝试了很多,这是我最好的尝试:
  • Select * From dbo.tblMaterialOrder mo Where Exists (Select MembershipUserId From dbo.tblMaterialOrderItem Where dbo.tblMaterialOrderItem.Material_MaterialId = (Select MaterialId From dbo.tblMaterial Where (ProductCode = '401.1201'))跨度>
  • 这是另一个不起作用的尝试: Select * from dbo.tblMaterialOrder, dbo.tblMaterialOrderItem, dbo.tblMaterial Where dbo.tblMaterialOrderItem.Material_MaterialId = '248' And dbo.tblMaterialOrderItem.MaterialOrder_MaterialOrderId = dbo.tblMaterial .MaterialOrderId
  • 从您的尝试看来,您似乎可以阅读有关 JOINs in SQL 的内容,这对于理解存储在表之间存在关系的数据库表中的数据至关重要。

标签: sql sql-server-2005


【解决方案1】:
SELECT 
  M.NAME
 ,M.MATERIALID
 ,O.ORDERDATE
FROM MATERIAL M
LEFT JOIN ORDERITEM OI ON M.MATERIALID = OI.MATERIAL_MATERIALID
LEFT JOIN ORDER O ON OI.MaterialOrder_MaterialOrderId = O.MaterialOrderId
WHERE M.MATERIALID = '401.1201'

【讨论】:

    【解决方案2】:

    试试这个未经测试的脚本:

    select a.name, b.orderdate, a.productcode 
    from tblMaterial a left outer join tblMaterialOrderItem b 
    on a.MaterialId = b.Material_MaterialId 
    left outer join tblMaterialOrder c 
    on c.MaterialOrder_MaterialOrderId = b.MaterialOrderId
    where a.productcode = '401.1201'
    

    【讨论】:

      【解决方案3】:

      类似这样的:

      SELECT
          tblMaterial.Name,
          tblMaterialOrder.OrderDate,
          tblMaterial.ProductCode
      FROM
          tblMaterial
          JOIN tblMaterialOrderItem
              ON tblMaterial.MaterialId=tblMaterialOrderItem.Material_MaterialId
          JOIN tblMaterialOrder
              ON tblMaterialOrder.MaterialOrderId=tblMaterialOrderItem.MaterialOrder_MaterialOrderId
      WHERE
          tblMaterial.ProductCode='401.1201'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-24
        • 1970-01-01
        • 1970-01-01
        • 2021-09-10
        • 1970-01-01
        • 2017-05-07
        • 2015-08-03
        • 1970-01-01
        相关资源
        最近更新 更多