sql连接问题

时间:2009-06-16 13:37:28

标签: sql

我有以下表格

nid    timestamp   title

82  1245157883  Home
61  1245100302  Minutes
132    1245097268  Sample Form
95  1245096985  Goals & Objectives
99  1245096952  Members

        pid     src         dst                                     language



        70  node/82         department/34-section-2      
        45  node/61/feed    department/22-section-2/feed     
        26  node/15         department/department1/15-department1    
        303 node/101        department/101-section-4 

这些是表的片段,并且缺少其余的数据(它们都非常大),但我尝试将第二个表中的dst列加入到第一个表中。它们应匹配“nid”,但第二个表有节点/ [nid],这使得它更复杂。我也想忽略以“feed”结尾的那些,因为我不需要它们。

非常感谢

编辑:我没有提到这个感觉很糟糕,但第一个表是来自

的sql结果
select nid, MAX(timestamp) as timestamp, title from node_revisions group by nid ORDER BY timestamp DESC LIMIT 0,5

第二个表的名称为“url_alias”

7 个答案:

答案 0 :(得分:5)

select * from table1 inner join table2 on src=concat('node/',nid)

修改
编辑以反映OP的变化

select `nid`, MAX(`timestamp`) as `timestamp`, `title` from `node_revisions` inner join `url_alias` on `src`=concat('node/',`nid`) group by `nid` ORDER BY `timestamp` DESC LIMIT 0,5

答案 1 :(得分:0)

我不知道您使用的数据库。但是,我建议你编写一个解析函数,从该列返回nid。然后,您可以进行此类查询(假设GET_NID是您定义的函数):

SELECT * from T1, T2
WHERE T1.nid = GET_NID( T2.node)

答案 2 :(得分:0)

您有几个选择。

  1. 编写一个将src转换为nid并在t1.nid = f(t2.src)上连接的函数 - 您没有说出您使用的DBMS,但大多数都有办法做到这一点。它会很慢,但这取决于表的大小。

  2. 与此类似,使用该函数创建一个具有计算字段的视图 - 速度相同,但可能更容易理解。

  3. 在t2中创建一个新的nid字段并使用该函数填充它。制作插入和更新触发器以使其保持最新,然后加入。如果您经常查询,这会更好。

  4. 转换t2以使其具有nid字段并从中计算src以及另一个字段,该字段是nid需要插入的模板。

答案 3 :(得分:0)

SELECT *
FROM (SELECT *, 'node/' + nid AS src FROM table1) t1
INNER JOIN table2 t2
ON t1.src = t2.src

答案 4 :(得分:0)

我将第二个表中的节点id拉入一个单独的列。否则,任何加入这两个表的尝试都会导致在src字段上进行一些表处理(我假设你的意思是src字段而不是dst字段)并且性能会有问题。

答案 5 :(得分:0)

根据您想要的场景(例如,如果您经常要执行此JOIN并且您的第二个表格相当大),您可能需要查看物化视图。

编写一个函数,执行所有逻辑以将nid提取到单独的列中。除了初始的m-view创建之外,该函数只需要在basetable更改(插入,更新,删除)时运行,而不是每次查询时对每行运行函数。

这允许对物化视图进行相当简单的连接,并具有表格的标准优势,例如索引。

注意:看起来我在写作时遭到了殴打:)

答案 6 :(得分:0)

您还没有使用DBMS指定。大多数引擎都支持使用正则表达式进行匹配的SQL-99标准SIMILAR TO子句。一些引擎也实现了这一点,但使用其他一些关键字而不是SIMILAR TO。

FirebirdSQL:
http://wiki.firebirdsql.org/wiki/index.php?page=SIMILAR+TO

的PostgreSQL:
http://www.network-theory.co.uk/docs/postgresql/vol1/SIMILARTORegularExpressions.html

的MySQL:
http://dev.mysql.com/doc/refman/5.0/en/regexp.html