为什么 SQL 显示两行而不是一行

Why SQL Displays Two Rows Instead of One

这是查询

SELECT o.OrderID, o.CNIC, 
   (SELECT FullName FROM Customer WHERE CNIC=o.CNIC) Customer, 
   o.Date 
FROM orders o 
JOIN ordersproduct op ON op.OrderID=o.OrderID 
WHERE o.OrderID=1;

这是结果

1 - 15604-5566123-2 - Shaiz Mehran - 2020-09-30
1 - 15604-5566123-2 - Shaiz Mehran - 2020-09-30

如果目的是只显示有订单的客户,而不是订单产品本身的详细信息,您可以使用以下内容:

    SELECT DISTINCT o.OrderID, o.CNIC, 
    (SELECT FullName FROM Customer WHERE CNIC=o.CNIC) Customer, 
    o.Date 
    FROM orders o 
    WHERE o.OrderID=1;

    SELECT DISTINCT o.OrderID, o.CNIC, 
    c.Customer, o.Date 
    FROM orders o
    INNER JOIN Customer c ON c.CNIC = o.CNIC
    WHERE o.OrderID=1;

如果这只是开始,您将显示客户订购的产品,它将显示两行,因为客户有两个产品 (orderproducts)。这将 return 两行具有不同的 orderproducts

    SELECT DISTINCT o.OrderID, o.CNIC, 
    c.Customer, o.Date op.ColumnTosShow
    FROM orders o
    INNER JOIN Customer c ON c.CNIC = o.CNIC
    INNER JOIN ordersproduct op ON op.OrderID=o.OrderID
    WHERE o.OrderID=1;
SELECT Distinct Orders.OrderID, Orders.CNIC, Customer.FullName
FROM (Orders LEFT JOIN Customer ON Orders.CNIC = Customer.CNIC)
LEFT JOIN OrdersProduct ON Orders.OrderID = OrdersProduct.OrderID;

您得到多行的原因是一个订单可以有多个产品。 . .每个产品你得到一行。

加入产品 table 似乎没有必要,所以只需使用:

SELECT o.OrderID, o.CNIC, 
       (SELECT FullName FROM Customer WHERE CNIC=o.CNIC) as Customer, 
       o.Date 
FROM orders o 
WHERE o.OrderID = 1;

我猜你有一个合理的数据模型,所以 orders 中没有多行给定的 id。 SELECT DISTINCT 没有必要。

我应该补充一点,JOIN 对于这个查询是非常合理的,但是像这样:

SELECT o.OrderID, o.CNIC, c.FullName as Customer, 
       o.Date 
FROM orders o LEFT JOIN
     customer c
     ON o.CNIC = c.CNIC
WHERE o.OrderID = 1;