Mysql多表选择

时间:2009-12-03 14:21:07

标签: mysql

我有一个表,例如“node”,我需要从中返回值,如下所示:

SELECT nid FROM node WHERE type = "book"

获得值列表后,请说:

|**nid**|
|123|
|12451|
|562|
|536|

然后我需要获取这些值,并检查另一个表,其中列'path'的值为“node / 123”,“node / 12451”(在先前的请求中返回的数字)在一个已加入的请求中。如果collumn'path'具有简单的数字,而没有'node /',那么这一切都会更容易。 然后还计算相同的数量,即返回的'node / 123'。 最终结果如下:

nid |  path  | count(path) | count(distinct path) 
123 |node/123|  412        |       123        
562 |node/562|  123        |       56   

如果在多个单独的查询中完成,则可以正常工作,但这样做不会。

3 个答案:

答案 0 :(得分:1)

select a.nid from node a join othertable b 
on b.path = concat("node/", a.nid) where type='book'

答案 1 :(得分:0)

您可以执行以下操作(nid可能需要额外转换为某种字符串类型):

SELECT *
FROM OtherTable
JOIN node ON path = CONCAT('node/', nid)
WHERE type = 'book'

答案 2 :(得分:0)

谢谢大家的帮助。基本上,问题是我不知道如何将nidnode/放在一起,但concat有所帮助。 最终结果类似于:

  SELECT node.nid, accesslog.path, count(accesslog.hostname), count(distinct accesslog.hostname)
    FROM `node`, `accesslog`
   WHERE node.uid=1
     AND node.type='raamat' 
     AND accesslog.path = CONCAT('node/', node.nid)
GROUP BY node.nid