数据库白痴求教这种SQL查询应该怎么写....

2013-04-18 21:16:23 +08:00
 sayori
如有两个表 item 和 info
info表结构大概是:info_id , item_id , info_name,info_value....
item中的每一行 在 info中都有多行关联的数据。info.item_id = item.id
然后想做的是查询item并取得所有关联的info行。

刚才研究了半天JOIN语句,但是好像只能返回一行info?
又想过先查询出item.id然后再进行第二次查询,但这样做如果一次要取出N行时要对info查询N次。影响速度?

求教,不胜感激。
3299 次点击
所在节点    问与答
12 条回复
123123
2013-04-18 21:33:30 +08:00
能否大概提供一下你所写的SQL,如果没有加类似 TOP 1 或 LIMIT 1 并且符合条件的数据不止一条的话,那么只返回一行是很神奇的情况
yhy2008
2013-04-18 21:40:46 +08:00
SELECT ······FROM item LEFT JOIN info WHERE info.item_id = item.id
如果我没理解错应该是这样
sayori
2013-04-18 21:57:38 +08:00
@123123

SELECT *
FROM item
LEFT JOIN `info` ON `info`.`item_id` = `item`.`id`
WHERE `item`.`status` = '1'
ORDER BY `item`.`id` DESC
LIMIT 16
xhinking
2013-04-18 22:03:08 +08:00
表中的测试数据有多少条?
sayori
2013-04-18 22:06:49 +08:00
@yhy2008 把ON 改成WHERE 发生错误呢... 用的是MYSQL
sayori
2013-04-18 22:09:03 +08:00
@xhinking 有多条。我检查过了..
sayori
2013-04-18 22:41:29 +08:00
@123123 悲剧,我再试了下发现确实返回多行。但每行一样ITEM数据都一样,不同的是info字段。这不是我想要的...

我想的是 比如用数组生成记录集时,有一个元素里是INFO的内容(当然这个元素的值也是数组..)

越搞越乱了....不管怎样先感谢各位。
123123
2013-04-18 22:45:28 +08:00
@sayori 没错,依照你的写法就是这样的返回值。如果你只想要 INFO 表的字段,那么 SELECT 后不要用 *,用 INFO.*
yhy2008
2013-04-19 09:59:23 +08:00
@sayori 不好意思写错了是用ON
是不是因为WHERE后的限定条件,如果item.status=1是唯一的话,它只会返回item一样的数据
Cadina
2013-04-19 17:03:09 +08:00
最反感字段前面还要加表名了
xunyu
2013-04-19 17:09:48 +08:00
@sayori 后台是用php吗?
Narcissu5
2013-04-19 18:28:23 +08:00
提醒下楼主,数据库求助一般是把表的create 脚本放出来,比你的描述会给力得多。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/66249

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX