簡體   English   中英

MySQL在兩個表上選擇查詢

[英]mysql select query on two tables

我試圖從兩個表中獲取結果,而沒有在第一個查詢循環中嵌套第二個查詢。

我有一個餐桌產品

product_code_1234 | product_name | otherfields...

還有一個表格類別 ,其中一個產品可以具有多個類別:

category_name_1 | product_code_1234
category_name_2 | product_code_1234
category_name_3 | product_code_1234

是否有查詢以獲得以下結果?

product_code_1234 | product_name | ... | category_name_1 | category_name_2 | category_name_3
select * from a,b 

將為您提供表a中的所有數據,以及表b中的所有數據。

但是,如果您不希望重復數據,並且表a和b之間沒有任何連接,那么沒有一些聯合或類似操作就無法完成

假設您有這些表:

+----------------------------+
| PRODUCTS                   |
+------+-------------+-------+
| code | name        | price |
+------+-------------+-------+
| 1    | Bike Helmet | 99.99 |
| 2    | Shirt       | 19.99 |
+------+-------------+-------+

+-------------------+
| CATEGORIES        |
+------+------------+
| code | category   |
+------+------------+
| 1    | Sports     |
| 1    | Cycling    |
| 1    | Protection |
| 2    | Men        |
| 2    | Clothing   |
+------+------------+

如果我的解釋正確,這是一個基於另一個SO答案的查詢,它將與您期望的結果匹配:

SELECT p.code, p.name, p.prize,
    (SELECT category FROM categories c WHERE c.code = p.code LIMIT 0, 1) as category1,
    (SELECT category FROM categories c WHERE c.code = p.code LIMIT 1, 1) as category2,
    (SELECT category FROM categories c WHERE c.code = p.code LIMIT 2, 1) as category3,
FROM products p

結果如下:

+------+-------------+-------+-----------+-----------+------------+
| code |    name     | price | category1 | category2 | category3  |
+------+-------------+-------+-----------+-----------+------------+
|    1 | Bike Helmet | 99.99 | sports    | cycling   | protection |
|    2 | Shirt       | 19.99 | men       | clothing  | NULL       |
+------+-------------+-------+-----------+-----------+------------+

但是,結果中不可能有動態的類別數。 在這種情況下,就像您的問題一樣,我將數字限制為3。 可能仍然會有性能更好的解決方案。 另外,這顯然是一個嵌套查詢,因此可能不適合您的需求。 不過,這是我能想到的最好的方法。

加入

還有SQL JOIN子句,這可能是您要查找的內容:

SELECT *
FROM products
NATURAL JOIN categories

您最終將得到以下結果:

+------+-------------+-------+------------+
| code | name        | price | category   |
+------+-------------+-------+------------+
| 1    | Bike Helmet | 99.99 | sports     |
| 1    | Bike Helmet | 99.99 | cycling    |
| 1    | Bike Helmet | 99.99 | protection |
| 2    | Shirt       | 19.99 | men        |
| 2    | Shirt       | 19.99 | clothing   |
+------+-------------+-------+------------+

我猜您將不得不做兩個單獨的查詢。

一種檢索產品,一種檢索產品類別。

然后使用任何腳本語言(如PHP)來實現所需的結果(顯示,導出等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM