gpt4 book ai didi

mysql - 引用 JOINing

转载 作者:行者123 更新时间:2023-11-29 13:29:12 25 4
gpt4 key购买 nike

我正在尝试为数据库中的票证建立一个引用系统。这些票证在主表中被区分为单独的“数据库”,并且我有一个辅助表指向该表,以便其他数据库可以引用另一个数据库的票证。

示例方案:

`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 上,以将这些引用的票证拉入与数据库的典型票证列表相同的结果中。

例如,我的正常查询看起来像针对一个数据库(通过大量 JOIN 进行了 super 简化):

SELECT t.*
FROM tickets
WHERE t.ticket_database = 1

以下是我尝试过的一些尝试,每个尝试都在 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 子句都适用于这两个集合,因为它们都应该作为一个结果出现。

最佳答案

在我看来你不需要一个 UNION:

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

关于mysql - 引用 JOINing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19718097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com