MySQL连接问题

MySQL连接问题,mysql,self-join,Mysql,Self Join,有谁能告诉我,是否可以使用自连接将以下两个查询合并为一个查询,如果可以,如何实现 问题1: SELECT pm.username AS user, uc.content_id AS id, value AS filename, name, moderation_status AS status, uc.parent_content_id FROM myweb.ugc_meta um

有谁能告诉我,是否可以使用自连接将以下两个查询合并为一个查询,如果可以,如何实现

问题1:

   SELECT pm.username AS user,
          uc.content_id AS id,
          value AS filename,
          name,
          moderation_status AS status,
          uc.parent_content_id
     FROM myweb.ugc_meta um
LEFT JOIN myweb.ugc_content uc ON uc.content_id = um.item_id
LEFT JOIN myweb.userbase_member pm ON uc.user_id = pm.id
    WHERE uc.content_type ='my.photo'
      AND uc.promoted = '1'
      AND moderation_status='passed'
    LIMIT 10
问题2:

SELECT value
  FROM myweb.ugc_meta um
 WHERE um.item_id = '4780c650137a3409901286'
-- (item_id is the content_parent_id from query 1)
ugc\u meta
包含
ugc\u content
中照片的相册名称<代码>ugc_内容包含相册和照片的行<代码>代表照片的行有一个
父内容id
,它是父行的
内容id
。我没有更改表或数据库结构的选项

目前,我正在为查询1中的每一个次优结果行运行一个新查询(查询2;-)


谢谢

如果要自联接表,必须为每个表指定不同的别名,那么它应该可以正常工作

   SELECT pm.username AS user,
          uc.content_id AS id,
          um.value AS filename, um2.value AS filename2
          um.name, um2.name AS name2
          moderation_status AS status,
          uc.parent_content_id
     FROM myweb.ugc_meta um
LEFT JOIN myweb.ugc_content uc
       ON uc.content_id = um.item_id
LEFT JOIN myweb.userbase_member pm
       ON uc.user_id = pm.id
LEFT JOIN myweb.ugc_meta um2
       ON id = um2.item_id
    WHERE uc.content_type ='my.photo'
      AND uc.promoted = '1'
      AND moderation_status='passed'
    LIMIT 10

希望这能奏效

您应该能够使用不同的别名简单地使用到ugc_元表的左联接,以实现父表联接,如下所示:

SELECT pm.username AS user,
          uc.content_id AS id,
          value AS filename,
          name,
          moderation_status AS status,
          uc.parent_content_id,
          parent.`value`
     FROM myweb.ugc_meta um
LEFT JOIN myweb.ugc_content uc ON uc.content_id = um.item_id
LEFT JOIN myweb.ugc_meta parent ON uc.parent_content_id = parent.item_id
LEFT JOIN myweb.userbase_member pm ON uc.user_id = pm.id
    WHERE uc.content_type ='my.photo'
      AND uc.promoted = '1'
      AND moderation_status='passed'
    LIMIT 10
我使用左连接是因为子表中可能不总是有父级内容id,如果在这种情况下总是有父级内容id,那么您可以使用内部连接,这将进一步提高性能。

这应该可以做到:

SELECT pm.username AS user,
      uc.content_id AS id,
      value AS filename, 
      name,
      moderation_status AS status,
      um2.value AS 
FROM myweb.ugc_meta um
LEFT JOIN myweb.ugc_content uc ON uc.content_id = um.item_id
LEFT JOIN myweb.userbase_member pm ON uc.user_id = pm.id
LEFT JOIN myweb.ugc_meta om2 ON um2.item_id = uc.parent_content_id
WHERE uc.content_type ='my.photo'
  AND uc.promoted = '1'
  AND moderation_status='passed'
LIMIT 10
如果它们来自ugc\U meta,您可能必须在
名称
适度状态
前面加上“um.”,否则该值是否取自
um
og
um2
,就会模糊不清