【问题标题】:SQL query for displaying related values on same column as separate columns用于将同一列上的相关值显示为单独列的 SQL 查询
【发布时间】:2013-03-25 21:28:30
【问题描述】:

我在 SQLITE 数据库中有一个类似的表结构,LANID 是另一个表的 FK:

ID   LANID    TEXT
-------------------------
1     101     Issue1
1     102     Comment1 for Issue1 
2     101     Issue2 
2     102     Comment1 for Issue2
3     101     Issue3
3     102     Comment1 for Issue3
1     102     Comment2 for Issue1
...

我正在尝试使用以下查询从共享相同 ID 的 TEXT 字段中获取值:

SELECT t.TEXT as issue, s.TEXT as comment
FROM MyTable as t, MyTable as s 
WHERE t.LANID = '101' and s.LANID = '102' AND t.ID = s.ID 
      AND t.TEXT like "%some text in Issue1%"

它几乎可以工作,但有一个问题:它不能在需要时“复制”值。换句话说,我不能像这样显示同一问题的第二条评论:

issue               comment
---------------------------------
Issue1        Comment1 for Issue1
Issue1        Comment2 for Issue1 
...

提前感谢任何提示。

【问题讨论】:

标签: sql sqlite join


【解决方案1】:

我会使用显式自我join,而不是原始查询中使用的隐式join

SELECT
  mt1.Text AS Issues,
  mt2.Text AS Comment
FROM MyTable mt1
JOIN Mytable mt2
  ON mt1.ID = mt2.ID
  AND mt1.LANID = 101
  AND mt2.LANID = 102

See it in action with Sql Fiddle.

【讨论】:

  • 感谢您的建议。
【解决方案2】:

我认为问题实际上在于您如何设置数据库。注释应该在一个单独的表中,引用具有外键的问题。如果没有完善的数据库设计,您将总是在一些事情上苦苦挣扎。

【讨论】:

  • 确实,这个真实数据库的简化示例似乎打破了所有规范化规则,但它仍然是为了处理一些特殊情况。
【解决方案3】:

您的查询确实显示第二条评论。见this example at SQL Fiddle

有关编写join 的更好方法,请参阅Michael Fredrickson's answer

【讨论】:

  • 我原来的查询确实有效。 ID 上的字段定义损坏是问题所在,老实说,我会花一整夜直到弄清楚...谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多