SQL查询从多个表

时间:2015-09-19 14:53:52

标签: mysql sql

我的两个表t1和t2之间有很多关系。我试图从t1获得属于t2的结果,我可以使用简单的连接,但我也希望获得与该t1行有关系的所有t2记录。

我会将我想要的结果翻译成json以便更好地理解:

[
    {
        "name": "t1.1",
        "t2s": [
            {
                "name": "t2.1"
            },
            {
                "name": "t2.2"
            }
        ]
    },
    {
        "name": "t1.2",
        "t2s": [
            {
                "name": "t2.1"
            },
            {
                "name": "t2.3"
            }
        ]
    }
]

更新: 这是我当前的查询,它返回关系的数据,但我也希望获得与t1有关系的所有t2记录。

select t1.name,t2.name 
from t1 
join t1_t2 as t1t2 
  on t1t2.id=t1.id 
where t1t2.id = '10'

db structure

1 个答案:

答案 0 :(得分:0)

我希望我理解目标就在这里。如果您要为某些Integer[] is = new Integer[100 + new Random().nextInt(500)]; Arrays.fill(is, 0); List<Integer> list = Arrays.asList(is); 行提取t1.namet2.name,则以下查询将执行此操作:

t1_t2

在这里,我只是加入SELECT t1.name, t2.name FROM t1_t2 JOIN t1 on t1_t2.t1_id = t1.id JOIN t2 on t1_t2.t2_id = t2.id WHERE t1_t2.id = 10 ,其中ids相等,而不是t1。如果这就是你所需要的,那就非常简单了。

另一方面,如果您希望所有t2t2.name相关联,则只需更改t1

WHERE

这将获得与t1行关联的所有行。

我可能会建议一个不同的,更简单的表结构:

WHERE t1.id = 10

请参阅,这里我将这两个表指向多对多表。然后你可以完全跳过t1_t2表并说:

t1:
  id
  t1_t2_id
  name
t2:
  id
  t1_t2_id
  name
t1_t2:
  id