簡體   English   中英

在子查詢中使用外部別名與mysql中的4個表

[英]Use outer alias in subquery with 4 Tables in mysql

大家好,我在MySQL中有4個表作為鍵值存儲

t1 (article):          t2:
| id | date |          | id | key     | value    |
-------------          ---------------------------
| 1  | 2016 |          | 1  | title   | title1   |
| 2  | 2017 |          | 1  | user_id | 1        |
| 3  | 2018 |          | 2  | title   | title2   |
-------------          | 2  | user_id | 2        |          
                       | 3  | title   | title3   |
                       | 3  | user_id | 1        |
                       ---------------------------

t1 (user):             t2:
| id | date |          | id | key   | value    |
-------------          -------------------------
| 1  | NULL |          | 1  | name  | user1    |
| 2  | NULL |          | 2  | name  | user2    |
-------------          -------------------------          

SELECT t1.id,
    GROUP_CONCAT(IF(t2.key='title',t2.value,NULL)) AS title,
    t1.date,
    GROUP_CONCAT(IF(t2.key='user_id',t2.value,NULL)) AS user_id,

(
SELECT GROUP_CONCAT(IF(t4.key='user_name',t4.value,NULL))
FROM t4
GROUP BY t4.id
HAVING t4.id = user_id

) AS user_name

FROM t1
    INNER JOIN t2
        ON t1.id = t2.id
GROUP BY t1.id

我想打印出存儲在t2中作為ID的用戶名,例如:

| id | title    | date   | user_id | user_name |
------------------------------------------------
| 1  | title1   | 2016   | 1       | user1     |
| 2  | title2   | 2017   | 2       | user2     |
| 3  | title3   | 2018   | 1       | user1     |
------------------------------------------------

我已經測試了WHERE子句和HAVING子句,但是對我沒有任何作用。

我發現您的表引用過於混亂,因此我使用了示例數據的解釋。 順便說一下,我只需要4張桌子中的3張。 演示

MySQL 5.6模式設置

CREATE TABLE articles
    (`id` int, `date` date)
;

INSERT INTO articles
    (`id`, `date`)
VALUES
    (1, '2016-01-01'),
    (2, '2017-01-01'),
    (3, '2018-01-01')
;


CREATE TABLE users
    (`id` int, `date` date)
;

INSERT INTO users
    (`id`, `date`)
VALUES
    (1, NULL),
    (2, NULL)
;


CREATE TABLE t2_upper
    (`id` int, `key` varchar(7), `value` varchar(6))
;

INSERT INTO t2_upper
    (`id`, `key`, `value`)
VALUES
    (1, 'title', 'title1'),
    (1, 'user_id', '1'),
    (2, 'title', 'title2'),
    (2, 'user_id', '2'),
    (3, 'title', 'title3'),
    (3, 'user_id', '1')
;


CREATE TABLE t2_lower
    (`id` int, `key` varchar(4), `value` varchar(5))
;

INSERT INTO t2_lower
    (`id`, `key`, `value`)
VALUES
    (1, 'name', 'user1'),
    (2, 'name', 'user2')
;

查詢1

select a.id, tn.value article_title, a.date, tu.id user_id, u.value user_name
from articles a
inner join (
    select
    *
    from t2_upper
    where `key` = 'title'
    ) tn on a.id = tn.id
inner join (
    select
    *
    from t2_upper
    where `key` = 'user_id'
  ) tu on a.id = tu.id
inner join (
    select
    *
    from t2_lower
    where `key` = 'name'
  ) u on tu.value = u.id

結果

| id | article_title |       date | user_id | user_name |
|----|---------------|------------|---------|-----------|
|  1 |        title1 | 2016-01-01 |       1 |     user1 |
|  2 |        title2 | 2017-01-01 |       2 |     user2 |
|  3 |        title3 | 2018-01-01 |       3 |     user1 |

暫無
暫無

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

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