我有 2 张桌子:
CREATE TABLE `categories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`asset_id` int(10) unsigned NOT NULL DEFAULT '0',
`title` mediumtext NOT NULL,
`published` tinyint
)
CREATE TABLE `content` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`asset_id` int(10) unsigned NOT NULL DEFAULT '0',
`title` mediumtext NOT NULL,
`catid` int(10) unsigned NOT NULL DEFAULT '0'
)
内容表中的“catid”也存储了该内容所属的类别(即类别表中的“id”) 现在,我想提取“有效”资产列表(包括类别和内容)。我使用以下查询,其中列出了所有“已发布”类别及其中的内容。
SELECT asset_id, title
FROM (SELECT asset_id, title FROM categories WHERE published=1) AS ca
UNION ALL
(SELECT asset_id, title FROM content WHERE catid IN
(select id FROM categories WHERE published = 1)
)
我可以得到想要的结果。但是,您可以看到,在查询中,FROM categories WHERE published = 1
已经重复了(在实际情况下,条件比刚才的要长得多published = 1
)。有没有更好的方法来做到这一点?
由于我的资产在“类别”中的“内容”中包含“图像”,因此我需要在每个子查询中重复所有条件UNION ALL
。调试查询就像地狱一样。
我在想是否有办法做select id, asset_id, title from categories ... AS ca
,然后将“id”列提取为第二个子查询的集合FROM content WHERE id IN ca.id
(当然这不起作用)。我试过“WITH”,但 Mysql 不支持它。非常感谢。