2013-05-02 99 views
1

創建一個查詢以列出所有Passenger Type輪胎的Store_Name,Part_ID,Model_Name,Manufacturer_Name和OnHand。按製造商名稱對列表進行排序。在mysql上創建查詢

這是我放了下來:

SELECT 
    STORELOCATION.STORE_NAME, 
    TIRES.PART_ID, 
    MODEL_NAME, 
    MANUFACTURERS.MANUFACTURER_NAME, 
    INVENTORY.ONHAND 
FROM 
    STORELOCATION, TIRES, MANUFACTURERS, INVENTORY 
WHERE 
    TIRE_TYPE = 'Passenger' 
ORDER BY MANUFACTURER_NAME; 

我喜歡4100分的記錄。我不需要重複。而我得到了

+---------+--------------------+----------------+------------+-------------+ 
| PART_ID | MODEL_NAME   | MANUFACTURERID | UNIT_PRICE | TIRE_TYPE | 
+---------+--------------------+----------------+------------+-------------+ 
| C424P | Kestral   | M3    |  45.99 | Passenger | 
| C434P | Peregrine   | M3    |  49.99 | Passenger | 
| C435T | Eagle    | M3    |  56.99 | Truck  | 
| C475X | Hawk    | M3    |  63.99 | Performance | 
| G738P | Cross-Country  | M1    |  27.99 | Passenger | 
| G812T | All-Terrain  | M1    |  39.99 | Truck  | 
| G814T | Expedition   | M1    |  47.99 | Truck  | 
| G868P | Urban    | M1    |  34.99 | Passenger | 
| G898X | Performance-Radial | M1    |  56.99 | Performance | 
| M225P | Symmetry   | M2    |  39.99 | Passenger | 
| M235P | Harmony   | M2    |  49.99 | Passenger | 
| M325X | Energy    | M2    |  54.99 | Performance | 
| M545X | Grand-Prix   | M2    |  89.99 | Performance | 
| Y320P | Touring   | M4    |  19.99 | Passenger | 
| Y430P | Assurance   | M4    |  29.99 | Passenger | 
| Y435P | Freedom   | M4    |  24.99 | Passenger | 
| Y440T | Cargo    | M4    |  29.99 | Truck  | 
| Y450T | Heavy-Duty   | M4    |  24.99 | Truck  | 
+---------+--------------------+----------------+------------+-------------+ 
18 rows in set (0.00 sec) 

Query OK, 0 rows affected (0.06 sec) 

Query OK, 4 rows affected (0.03 sec) 
Records: 4 Duplicates: 0 Warnings: 0 

+----------------+-------------------+-------------------+------------------+ 
| MANUFACTURERID | MANUFACTURER_NAME | MANUFACTURER_CITY | MANUFACTURER_REP | 
+----------------+-------------------+-------------------+------------------+ 
| M1    | GoodTread   | Akron    | Ben    | 
| M2    | Michelle   | Columbus   | Sarah   | 
| M3    | ChickenCoop  | Findlay   | George   | 
| M4    | Yomama   | Toledo   | Steve   | 
+----------------+-------------------+-------------------+------------------+ 
4 rows in set (0.00 sec) 

Query OK, 0 rows affected (0.07 sec) 

Query OK, 3 rows affected (0.02 sec) 
Records: 3 Duplicates: 0 Warnings: 0 

+----------+-------------+-----------+---------------+ 
| STORE_ID | STORE_NAME | LOCATION | STORE_MANAGER | 
+----------+-------------+-----------+---------------+ 
| DT  | LUCKY ONE | Downtown | Robert  | 
| ES  | LUCKY TWO | Eastside | Megan   | 
| NS  | LUCKY THREE | Northside | Harold  | 
+----------+-------------+-----------+---------------+ 
3 rows in set (0.00 sec) 

Query OK, 0 rows affected (0.13 sec) 

+----------+--------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+----------+--------------+------+-----+---------+-------+ 
| PART_ID | char(5)  | NO | PRI |   |  | 
| STORE_ID | char(3)  | NO | PRI |   |  | 
| ONHAND | decimal(5,0) | YES |  | NULL |  | 
+----------+--------------+------+-----+---------+-------+ 

-> FROM INVENTORY; 
+---------+----------+--------+ 
| PART_ID | STORE_ID | ONHAND | 
+---------+----------+--------+ 
| C424P | DT  |  8 | 
| C424P | ES  |  28 | 
| C424P | NS  |  18 | 
| C434P | DT  |  10 | 
| C434P | ES  |  20 | 
| C434P | NS  |  10 | 
| C435T | DT  |  2 | 
| C435T | ES  |  12 | 
| C475X | DT  |  24 | 
| C475X | ES  |  20 | 
| C475X | NS  |  24 | 
| G738P | DT  |  12 | 
| G738P | ES  |  32 | 
| G738P | NS  |  20 | 
| G812T | DT  |  40 | 
| G812T | ES  |  40 | 
| G812T | NS  |  34 | 
| G814T | DT  |  20 | 
| G814T | ES  |  20 | 
| G814T | NS  |  20 | 
| G868P | DT  |  36 | 
| G898X | DT  |  12 | 
| G898X | NS  |  12 | 
| M225P | DT  |  8 | 
| M225P | NS  |  8 | 
| M235P | DT  |  4 | 
| M235P | NS  |  4 | 
| M325X | DT  |  40 | 
| M325X | ES  |  40 | 
| M325X | NS  |  50 | 
| M545X | DT  |  40 | 
| M545X | NS  |  60 | 
| Y320P | DT  |  12 | 
| Y320P | ES  |  12 | 
| Y320P | NS  |  32 | 
| Y430P | DT  |  44 | 
| Y430P | ES  |  44 | 
| Y430P | NS  |  44 | 
| Y435P | DT  |  12 | 
| Y435P | ES  |  20 | 
| Y435P | NS  |  12 | 
| Y440T | DT  |  8 | 
| Y450T | DT  |  32 | 
| Y450T | ES  |  36 | 
| Y450T | NS  |  32 | 
+---------+----------+--------+ 
+5

那麼你是不是要創建一個笛卡爾特定列加入您的表結果集。你可以發佈你的表結構嗎? – Taryn 2013-05-02 21:01:11

+1

重複什麼?整行?特定領域?一些領域的組合? – 2013-05-02 21:01:44

+2

你試過SELECT DISTINCT了嗎? – 2013-05-02 21:10:17

回答

-2

你需要GROUP BY你不想要有重複例如

WHERE 
    TIRE_TYPE = 'Passenger' 
    GROUP BY STORELOCATION.STORE_NAME 
    ORDER BY MANUFACTURER_NAME; 
1

假設一個最小的方案之列,從查詢反向工程的,:

storelocation 
    store_location_id 
    store_name 

inventory 
    store_location_id 
    part_id 
    onhand 

tires 
    part_id 
    manufacturer_id 
    model_name 

manufacturer 
    manufacturer_id 
    manufacturer_name 

此查詢已接近您想要的數據

SELECT 
    sl.STORE_NAME, 
    t.PART_ID, 
    t.MODEL_NAME, 
    m.MANUFACTURER_NAME, 
    inv.ONHAND 
FROM 
    inventory inv 
    left join storelocation sl on inv.store_location_id = sl.store_location_id 
    left join tires t on inv.part_id = t.part_id 
    left join manufacturer m on t.manufacturer_id = m.manufacturer_id 
WHERE 
    t.TIRE_TYPE = 'Passenger' 
ORDER BY MANUFACTURER_NAME; 
2

您在當前查詢中遇到的問題是您沒有將表連接到適當的外鍵,因此您正在生成笛卡爾結果。

使用,您張貼,你需要JOIN的外鍵的表的模式:

SELECT 
    s.STORE_NAME, 
    t.PART_ID, 
    t.MODEL_NAME, 
    m.MANUFACTURER_NAME, 
    i.ONHAND 
FROM STORELOCATION s 
INNER JOIN INVENTORY i 
    on s.STORE_ID = i.storeid 
INNER JOIN TIRES t 
    on i.partid = t.PART_ID 
INNER JOIN MANUFACTURERS m 
    on t.MANUFACTURERID = m.MANUFACTURERID 
WHERE TIRE_TYPE = 'Passenger' 
ORDER BY MANUFACTURER_NAME; 

SQL Fiddle with Demo

+0

+1當你是對的,你是對的......「藍色腳」是什麼意思? – Bohemian 2013-05-02 21:39:41

+0

@波希米亞我跑了很多。 :)或者我是部分smurf。 – Taryn 2013-05-02 21:42:28

+0

什麼是INVENTORY i?你的意思是ONTAND INVENTORY? – 2013-05-02 21:48:20