SQL查询帮助

时间:2011-07-01 15:50:30

标签: php mysql

我试图从同一服务器上具有完全相同结构的2个数据库中进行选择,db2是db1的延续。问题是我试图从两个数据库中选择相同的信息“不同的唯一ID”,我需要格式化的查询:link_id AS id,标题AS标题使用$ row ['title']等正确显示信息这是我的询问。

$CONF['mysql_query'] = 'SELECT db1.l.link_id AS id, db1.l.title AS title, db2.r.link_id AS id, db2.r.title AS title FROM db1.links AS l LEFT OUTER JOIN db2.links AS r ON (r.link_id = l.link_id) WHERE l.link_id IN ($ids)';

为什么不允许我对这两个数据库使用标题AS标题等?有没有办法可以做到这一点?感谢。

2 个答案:

答案 0 :(得分:2)

SELECT列表中不能有2个具有相同名称的列。这就是为什么你不能有两个id或两个title

如果要加入这两个表,请使用:

$CONF['mysql_query'] = "
        SELECT l.link_id AS idL
             , l.title AS titleL
             , r.link_id AS idR
             , r.title AS titleR
        FROM db1.links AS l
          LEFT OUTER JOIN db2.links AS r
            ON (r.link_id = l.link_id)
        WHERE l.link_id IN ($ids)
    ";

上面将显示满足第一个表中l.link_id IN ($ids)条件的所有ID和标题以及第二个表中的相应标题。第3和第4列中的NULL将显示第二个表中是否没有相应的行。


如果您想要UNION,例如第一个表中的所有行(满足l.link_id IN ($ids)条件)加上第二个表中的所有行,使用:

$CONF['mysql_query'] = "
        SELECT link_id AS id
             , title AS title
        FROM db1.links AS l
        WHERE l.link_id IN ($ids)
    UNION                   
        SELECT link_id AS id
             , title AS title
        FROM db2.links AS r
    ";

这可能会显示具有相同ID的行,每个表都有一行。甚至重复行。但是,通过放置UNION ALL而不是UNION,可以轻松避免重复行。

答案 1 :(得分:0)

在单引号中使用别名标题,它将允许你

select t1.Title as 'title' , t2.Title as 'title' from Table1 t1,Table t2