SQL JOIN table2 ON table2.value in(table1.value)

时间:2017-02-03 11:51:59

标签: sql sql-server tsql join inner-join

我想基于它的值在表上执行内部联接,如下所示:

@foreach ($projects as $key => $project)
  <tr>
   <td>{{ ++$i }}</td>
   <td>{{ $project->title }}</td>
   <td>{{ $project->code }}</td>
   <td>{{ $project->domain->name }}</td>
   <td>{{ $project->owner->name }}</td>
  </tr>
@endforeach

使用in()的东西不起作用,&#34; 在(table1.value) &#34;未被解释为&#34; in(&#39; 1&#39;,&#39; 2&#39;) &#34;,它确实没有显示任何结果。

表1:

SELECT table2.value FROM table1
INNER JOIN table2 ON table2.key IN (table1.value)
WHERE table1.key = 'test'

表2:

KEY    VALUE
test   '1','2'

我知道有这样的解决方法,但我想在没有额外选择的情况下解决这个问题。

KEY    VALUE
1      result1
2      result2
3      result3

有什么想法吗? 谢谢, 伦纳特

1 个答案:

答案 0 :(得分:4)

首先,您的数据结构完全错误。您不应该在字符串中存储ID列表。有很多好的理由:

  • SQL没有良好的字符串处理功能。
  • 您不应将整数存储为字符串。
  • 您应该声明正确的外键关系。
  • 您的查询无法利用索引或分区。

正确的解决方案是每个键和每个值一行。

但是,有时候,我们会遇到其他人非常糟糕的设计决策。在这种情况下,您可以使用like

SELECT table2.value
FROM table1 t1 INNER JOIN
     table2 t2
     ON t1.value LIKE '%''' + t2.key + '''%'
WHERE t1.key = 'test';