如何从连接的MySQL表中进行选择?
我基本上有两张桌子:如何从连接的MySQL表中进行选择?,sql,mysql,Sql,Mysql,我基本上有两张桌子: A(id int, name varchar(10), info varchar(10)) B(id int, item varchar(10)) A 1 A Hello 2 B World 3 C Foo B 1 apple 1 orange 1 hammer 2 glass 2 cup +------+------+-------+------------------------------------+ | id | name | info | group
A(id int, name varchar(10), info varchar(10))
B(id int, item varchar(10))
A
1 A Hello
2 B World
3 C Foo
B
1 apple
1 orange
1 hammer
2 glass
2 cup
+------+------+-------+------------------------------------+
| id | name | info | group_concat(b.item separator ' ') |
+------+------+-------+------------------------------------+
| 1 | A | Hello | apple orange hammer |
| 2 | B | World | glass cup |
| 3 | C | Foo | NULL |
+------+------+-------+------------------------------------+
正在使用以下查询
mysql> SELECT a.id, a.name, a.info, group_concat(b.item SEPARATOR ' ')
FROM a
LEFT OUTER JOIN b ON (a.id=b.id)
GROUP BY 1,2,3;
+------+------+-------+------------------------------------+
| id | name | info | group_concat(b.item separator ' ') |
+------+------+-------+------------------------------------+
| 1 | A | Hello | apple orange hammer |
| 2 | B | World | glass cup |
| 3 | C | Foo | NULL |
+------+------+-------+------------------------------------+
我得到了期望的输出:
+------+------+-------+------------------------------------+
| id | name | info | group_concat(b.item separator ' ') |
+------+------+-------+------------------------------------+
| 1 | A | Hello | apple orange hammer |
| 2 | B | World | glass cup |
| 3 | C | Foo | NULL |
+------+------+-------+------------------------------------+
现在我想修改查询以获得一个结果表,该表包含相同的信息,但只包含以字母o开头的项目,(如“o%”)
如何获得以下输出
+------+------+-------+------------------------------------+
| id | name | info | group_concat(b.item separator ' ') |
+------+------+-------+------------------------------------+
| 1 | A | Hello | apple orange hammer |
| 2 | B | World | glass cup |
| 3 | C | Foo | NULL |
+------+------+-------+------------------------------------+
+------+------+-------+------------------------------------+
| id | name | info | group_concat(b.item separator ' ') |
+------+------+-------+------------------------------------+
| 1 | A | Hello | apple orange hammer |
+------+------+-------+------------------------------------+
请注意,我仍然希望显示整个字符串'apple orange hammer'
,而不仅仅是'orange'
+------+------+-------+------------------------------------+
| id | name | info | group_concat(b.item separator ' ') |
+------+------+-------+------------------------------------+
| 1 | A | Hello | apple orange hammer |
| 2 | B | World | glass cup |
| 3 | C | Foo | NULL |
+------+------+-------+------------------------------------+
SELECT a.id, a.name, a.info, group_concat(b.item SEPARATOR ' ')
FROM a
LEFT OUTER JOIN b ON (a.id=b.id)
WHERE a.id in (select id from b where upper(SUBSTRING(b.item,0,1)) = 'O')
GROUP BY 1,2,3
我怀疑这是否能很好地执行,但在我看来这似乎是合乎逻辑的。在group by之后,您需要在group_concat上使用不得不执行的like运算符
+------+------+-------+------------------------------------+
| id | name | info | group_concat(b.item separator ' ') |
+------+------+-------+------------------------------------+
| 1 | A | Hello | apple orange hammer |
| 2 | B | World | glass cup |
| 3 | C | Foo | NULL |
+------+------+-------+------------------------------------+
Group By 1,2,3
HAVING group_concat(b.item SEPARATOR ' ') like ('%o%')
请注意,我正在寻找您需要调整类似声明以符合您的要求的任何o。还有另一种方法:
+------+------+-------+------------------------------------+
| id | name | info | group_concat(b.item separator ' ') |
+------+------+-------+------------------------------------+
| 1 | A | Hello | apple orange hammer |
| 2 | B | World | glass cup |
| 3 | C | Foo | NULL |
+------+------+-------+------------------------------------+
SELECT a.id, a.name, a.info, group_concat(b.item SEPARATOR ' ') AS items
FROM a
LEFT OUTER JOIN b ON (a.id=b.id)
GROUP BY 1,2,3
HAVING items REGEXP '[[:<:]]o';
选择a.id、a.name、a.info、group_concat(b.项目分隔符“”)作为项目
从
左外连接b打开(a.id=b.id)
按1,2,3分组
具有项REGEXP'[]:
如果在b(item,id)
+------+------+-------+------------------------------------+
| id | name | info | group_concat(b.item separator ' ') |
+------+------+-------+------------------------------------+
| 1 | A | Hello | apple orange hammer |
| 2 | B | World | glass cup |
| 3 | C | Foo | NULL |
+------+------+-------+------------------------------------+