Mysql 参考连接

Mysql 参考连接,mysql,union,Mysql,Union,我正试图在数据库中为门票制作一个参考系统。票证在主表中被区分为单独的“数据库”,我有一个指向此表的辅助表,其他数据库可以引用另一个数据库的票证 一个示例方案: `tickets` ------------------------------------------- | ticket_id | ticket_cid | ticket_database| ------------------------------------------- | 1 | 1 |

我正试图在数据库中为门票制作一个参考系统。票证在主表中被区分为单独的“数据库”,我有一个指向此表的辅助表,其他数据库可以引用另一个数据库的票证

一个示例方案:

`tickets`
-------------------------------------------
| ticket_id | ticket_cid | ticket_database|
-------------------------------------------
|        1 |          1 |               1 |
|        2 |          1 |               2 |
|        3 |          1 |               3 |
-------------------------------------------

`tickets_references`
--------------------------------------
| ref_id | ref_ticket | ref_database |
--------------------------------------
|      1 |          1 |            2 |
|      2 |          3 |            1 |
--------------------------------------
这使我能够保留单独的“数据库”,但随后会对一张票证出现在另一个数据库中进行特殊处理。对于本例,每个数据库都有一个票证。票证#1将以独占方式显示在数据库#1中,但引用使其也显示在数据库#2中。票证#3显示在数据库#3中,但也显示为数据库#1中的引用。票证#2只是显示在数据库#2中,没有引用

我的问题出现在我试图创建的联合中,它将这些引用的票证拉入与数据库的典型票证列表相同的结果中

例如,我的普通查询类似于一个数据库(从大量联接中超级简化):

以下是我尝试过的几次尝试,每次尝试都会在UNION或WHERE附近出现语法错误:

SELECT
    (SELECT t.*
    FROM tickets AS t
    )

    UNION ALL

    (SELECT t.*
    FROM tickets_references AS r
    LEFT JOIN tickets
        ON r.ref_ticket = t.ticket_id
    )

WHERE t.ticket_database = 1
ORDER BY t.ticket_opened



SELECT *
    FROM (SELECT t.*
        FROM tickets AS t

        UNION ALL

        SELECT t.*
        FROM tickets_references AS r
        LEFT JOIN tickets AS t
            ON r.ref_ticket = t.ticket_id

    )

WHERE t.ticket_database = 1
ORDER BY t.ticket_opened

在我当前的代码结构中,如果可能的话,WHERE作为最后一个子句是非常重要的,因为它是为各种条件附加的。当然,我还需要一种方法,使我所有的WHERE子句都适用于这两个集合,因为它们都应该作为一个结果出现。

在我看来,你并不需要一个并集:

SELECT DISTINCT t.*
FROM tickets t
LEFT JOIN tickets_references tr ON tr.ref_ticket = t.ticket_id
WHERE t.ticket_database = 1 OR (tr.ticket_database IS NOT NULL AND tr.ticket_database = 1)
ORDER BY t.ticket_opened

明亮的我从来没有想过做一个简单的连接,因为我实际上并没有从引用表本身选择数据。我知道它现在是如何工作的,它的工作就像我需要的,谢谢!
SELECT DISTINCT t.*
FROM tickets t
LEFT JOIN tickets_references tr ON tr.ref_ticket = t.ticket_id
WHERE t.ticket_database = 1 OR (tr.ticket_database IS NOT NULL AND tr.ticket_database = 1)
ORDER BY t.ticket_opened