0

サブクエリに個別を追加すると、個別の行または複数の行が表示されますか..??

クエリがあり、エラーが発生します

Subquery returns more than 1 row 

そしてクエリはこれです

SELECT DISTINCT(o.order_id), (SELECT DISTINCT op.vendor_id FROM order_product op 
WHERE op.order_id = o.order_id) AS vendor_id, CONCAT(o.firstname, ' ', o.lastname) 
AS customer, CONCAT(o.shipping_address_1, o.shipping_address_2, o.shipping_city,',',
o.shipping_zone,',',o.shipping_country,'-',o.shipping_postcode) AS address, 
(SELECT os.name FROM order_status os WHERE os.order_status_id = o.order_status_id
AND os.language_id = '1') AS status, (SELECT delivery_boy_name FROM delivery_boys db
WHERE o.delivery_boy_id = db.delivery_boy_id) as delivery_boy, o.delivery_boy_id, 
o.order_status_id, o.total, (SELECT SUM(op.total) FROM order_product op WHERE 
op.order_id = o.order_id AND op.vendor_id = '37') AS total, (SELECT os.cost FROM 
order_shipping os WHERE os.order_id = o.order_id AND os.vendor_id = '37') AS 
shipping_cost, o.currency_code, o.currency_value, o.date_added, o.date_modified 
FROM `order` o LEFT JOIN `order_product` op ON (o.order_id = op.order_id) WHERE 
o.order_status_id > '0' AND op.vendor_id = '37' AND 
DATE(o.date_added) = DATE('2012-10-11') AND o.order_status_id NOT IN (6,7) 
ORDER BY o.date_added DESC

申し訳ありませんが、クエリが長すぎます..2番目のサブクエリが

(SELECT DISTINCT op.vendor_id FROM order_product op 
WHERE op.order_id = o.order_id) AS vendor_id

上記のサブクエリでは、私のターゲットは order_product テーブルから vendor_id を取得することであり、1 つの order_id は同じ vendor_id を持つため、個別に追加しましたが、mysql で複数行のエラーが発生します。

このクエリを変更するにはどうすればよいですか..?? 前もって感謝します。

4

2 に答える 2

1

"distinct" を使用しても、クエリが必ずしも 1 行のみを返すとは限りません。「distinct」は、重複する行を排除することを意味します。したがって、簡単な例として、1 つの列を持つテーブルがあり、値が 1、2、2、および 3 の 4 つのレコードがある場合、select without distinct は、1、2、2、および 3 の 4 つの行を返します。 . select distinct は、1、2、および 3 の 3 つの行を返します。

あなたのクエリはかなり複雑なので、何を達成しようとしているのかわかりません。「select ... limit 1」と言って、サブクエリが1行だけを返すようにすることができます。または、select 句のすべてのフィールドを置き換えることもできます。この場合は、おそらく vendor_id だけを、select max(vendor_id) のような集約に置き換えます。多くの場合、where 句に制限を追加して、1 つのレコードのみが条件を満たすようにする必要があります。

適格なレコードが 1 つしかないことを期待しているが、実際には複数ある場合、問題はデータであり、クエリではありません。複数ある可能性がある場合は、必要なものを特定し、そのクエリのみを取得するようにクエリを変更する必要があります。

于 2012-10-11T15:19:58.930 に答える
0

Distinct は常に複数の行を返します。ある条件で内部結合を実行して行を制限するか、別の特定の条件で行をフィルタリングすることができます。

于 2012-10-11T15:23:28.353 に答える