gpt4 book ai didi

mysql - 如何有条件地加入不同的表?

转载 作者:行者123 更新时间:2023-11-28 23:52:43 26 4
gpt4 key购买 nike

我正在使用 MySQL。

我有三个名为ratingsusers 的表和一个主表master_entityType

根据 master_entityType 表的 entityTable 列的值,我必须与另一个表连接。如果 master_entityType 的值是“Blogs”,我必须加入 blogs 表。如果 master_entityType 的值为“items”,我必须加入 items 表。

SELECT * FROM ratings AS r
LEFT JOIN users AS u ON u.userID = r.userID
LEFT JOIN master_entityType AS ms ON ms.entityTypeID = r.entityTypeID
CASE ms.entityTable
WHEN 'Blogs' THEN INNER JOIN blogs AS b ON b.blogID = r.entityID
END
WHERE r.entityTypeID = '10' AND r.entityID = '1' AND r.userID = '1'

在使用上述查询时出现错误,请建议一些步骤以使该查询正常工作。

表的结构如下,

在用户表中,

UserID  userName isActive 
1 Dinesh 1
2 Kumar 1

在评分表中,

ratingID   entityID  entityTypeID   userID  rating
1 1 1 1 5
2 4 2 1 4

在 master_entityType 表中,

entityTypeID  entityTable  entityTypeName  entityTypeDescription  active
1 blogs Blogs Null 1
2 items Items Null 1

在项目表中,

ItemID   name    collection     active
4 pencil 12 1
5 pen 06 1

在博客表中,

blogID   name     active
1 socail 1
2 private 1

最佳答案

你的设计很奇怪,所以性能很可能很差。

UNION ALL 将两个表连接在一起并与结果连接。像这样的东西。如果 MySQL 有 View ,则创建联合 ItemsBlogs 表的 View ,并在其他查询中使用该 View 。它使查询更易于阅读、理解和维护。

这里是 SQL Fiddle .我调整了 fiddle 中的 WHERE 条件,因为样本数据没有任何行 entityTypeID = 10

SELECT * 
FROM
ratings AS r
LEFT JOIN users AS u ON u.userID = r.userID
LEFT JOIN master_entityType AS ms ON ms.entityTypeID = r.entityTypeID
INNER JOIN
(
SELECT
ItemID AS EntityID
,'Items' AS EntityTypeName
,name
,active
FROM items

UNION ALL

SELECT
BlogID AS EntityID
,'Blogs' AS EntityTypeName
,name
,active
FROM blogs
) AS Entities ON
Entities.EntityTypeName = ms.entityTypeName
AND Entities.EntityID = r.entityID
WHERE r.entityTypeID = '10' AND r.entityID = '1' AND r.userID = '1'

关于mysql - 如何有条件地加入不同的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32368842/

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