簡體   English   中英

MySQL從同一個表中選擇具有相同連接ID的多個行

[英]MySQL Selecting multiple rows with the same joining ID from the same table

MySQL數據庫示例:

data_name | page_id | data
--------------------------
brand | 83 | brandA
brand | 88 | brandA
brand | 89 | brandA *
type | 89 | typeA *
type | 90 | typeA
type | 98 | typeA

我進入的唯一數據是:

data_name = brand, 
data_name = type,
data = brandA,
data = typeA

我需要的是第一個page_id是相同的。 所以在這種情況下,89,89是相同的。 這就是我想要回歸的結果。

我所擁有的幾乎是有效的:

 SELECT * FROM `data` WHERE (`data_name` = 'brand' AND `data` = 'brandA') OR (`data_name` = 'type' AND `data` = 'typeA')

我可以用PHP來預測結果,但我更願意在MySQL中找到答案。

有任何想法嗎? 謝謝

只是在這里猜測......

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(data_name VARCHAR(12) NOT NULL
,page_id  INT NOT NULL
,data VARCHAR(12) NOT NULL
,PRIMARY KEY(data_name,page_id)
);

INSERT INTO my_table VALUES
('brand',83,'brandA'),
('brand',88,'brandA'),
('brand',89,'brandA'),
('type',89,'typeA'),
('type',90,'typeA'),
('type',98,'typeA');

SELECT x.page_id 
  FROM my_table x 
 WHERE (data_name,data) IN(('brand','brandA'),('type','typeA')) 
 GROUP  
    BY page_id 
HAVING COUNT(*) = 2;
+---------+
| page_id |
+---------+
|      89 |
+---------+

在這種情況下,如果您只想顯示具有品牌和價值的記錄的所有ID ,請嘗試使用此命令,它將顯示您想要的已經具有TYPE和BRAND的每個ID

SELECT A.page_id
FROM data A
  INNER JOIN (SELECT * FROM data ) as B ON B.page_id = A.page_id AND B.data_name != A.data_name
GROUP BY A.page_id

這應該有效,將表連接到自身:

SELECT
    d1.page_id
FROM
    (SELECT
        pade_id
    FROM
        `data`
    WHERE
        data_name = 'type') d1
INNER JOIN
    (SELECT
        pade_id
    FROM
        `data`
    WHERE
        data_name = 'brand') d2
    ON d1.page_id = d2.page_id;

應該管用:

SELECT orig.page_id, second.page_id as s_page_id 
FROM `data` as orig, (SELECT * FROM `data` WHERE page_id = orig.page_id AND  data_name = 'brand') AS second 
WHERE orig.data_name = 'type';

暫無
暫無

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

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