2014-01-29 86 views
0

我試圖做一個SELECT查詢....不是更新或INSERT或DELETE。子查詢作爲另一個字段

我有三張桌子。

  • Customers表
  • 發票表
  • 的invoice_items表

我想運行一個查詢會告訴我每張發票。每張發票只能有一個客戶和許多項目...。因此invoice_items

我當前的查詢看起來像這樣

SELECT i.order_date, c.name, thedata.info from invoices i inner join customers c ON (i.customer = c.id) right join (select x.order, group_concat(concat(x.itemname,' ', x.itemdesc) separator "\n") as info from invoice_items x) thedata on (i.id = thedata.order) 

當我運行此查詢,我收到一封包含一個行,一個客戶存在,一張發票,以及任何每件商品的清單,無論發票編號或客戶... ???

+---------------------+--------------+---------------------------------------------------------------------------------------------------------------------------------+ 
| order_date   | name   | info                               | 
+---------------------+--------------+---------------------------------------------------------------------------------------------------------------------------------+ 
| 2014-01-23 20:39:20 | Joe Customer | Boxes for boxing 
Shoes for shining 
2" Hermosa Plank for bobblin 
Boxes for boxing 
bobbles for bobblin 
Lot 297 Woodale Carmel Oak | 
+---------------------+--------------+---------------------------------------------------------------------------------------------------------------------------------+ 

我的目標是收到這個相同的列表,但顯示所有客戶以及他們的項目。 我在做什麼錯?

這裏是模式,爲那些需要他們。

客戶

+---------------+------------+------+-----+---------+----------------+ 
| Field   | Type  | Null | Key | Default | Extra   | 
+---------------+------------+------+-----+---------+----------------+ 
| id   | int(11) | NO | PRI | NULL | auto_increment | 
| name   | text  | NO |  | NULL |    | 
| ship_address | text  | NO |  | NULL |    | 
| ship_address2 | text  | NO |  | NULL |    | 
| ship_city  | text  | NO |  | NULL |    | 
| ship_state | text  | NO |  | NULL |    | 
| ship_zip  | int(6)  | NO |  | NULL |    | 
| bill_address | text  | NO |  | NULL |    | 
| bill_address2 | text  | NO |  | NULL |    | 
| bill_city  | text  | NO |  | NULL |    | 
| bill_state | text  | NO |  | NULL |    | 
| bill_zip  | text  | NO |  | NULL |    | 
| phone   | bigint(20) | NO |  | NULL |    | 
| email   | text  | NO |  | NULL |    | 
+---------------+------------+------+-----+---------+----------------+ 

發票

+-------------+----------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-------------+----------+------+-----+---------+----------------+ 
| id   | int(11) | NO | PRI | NULL | auto_increment | 
| customer | int(11) | NO |  | NULL |    | 
| order_date | datetime | NO |  | NULL |    | 
| status  | text  | NO |  | NULL |    | 
| freightcost | double | NO |  | NULL |    | 
+-------------+----------+------+-----+---------+----------------+ 

Invoice_items

+-----------+---------+------+-----+---------+----------------+ 
| Field  | Type | Null | Key | Default | Extra   | 
+-----------+---------+------+-----+---------+----------------+ 
| id  | int(11) | NO | PRI | NULL | auto_increment | 
| order  | int(11) | NO |  | NULL |    | 
| qty  | int(11) | NO |  | NULL |    | 
| itemname | text | NO |  | NULL |    | 
| itemdesc | text | NO |  | NULL |    | 
| itemprice | double | NO |  | NULL |    | 
+-----------+---------+------+-----+---------+----------------+ 

回答

0

嘗試下面的曲如果使用GROUP_CONCAT(),則需要使用GROUP BY。

SELECT i.order_date, 
     c.name, 
     group_concat(concat(x.itemname,' ', x.itemdesc) separator "\n") as info 
FROM invoices i 
INNER JOIN customers c ON i.customer = c.id 
LEFT JOIN invoice_items x ON i.id = x.order 
GROUP BY i.order_date,c.name 
+0

非常感謝!這工作完美無瑕。它只需要一個HAVING子句'HAVING info IS NOT NULL'。現在我可以繼續這個項目。 – dockeryZ

+0

很高興爲雅工作 –

相關問題