sayori
V2EX  ›  问与答

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

  •  
  •   sayori · Apr 18, 2013 · 4299 views
    This topic created in 4786 days ago, the information mentioned may be changed or developed.
    如有两个表 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次。影响速度?

    求教,不胜感激。
    12 replies    1970-01-01 08:00:00 +08:00
    123123
        1
    123123  
       Apr 18, 2013   ❤️ 1
    能否大概提供一下你所写的SQL,如果没有加类似 TOP 1 或 LIMIT 1 并且符合条件的数据不止一条的话,那么只返回一行是很神奇的情况
    yhy2008
        2
    yhy2008  
       Apr 18, 2013   ❤️ 1
    SELECT ······FROM item LEFT JOIN info WHERE info.item_id = item.id
    如果我没理解错应该是这样
    sayori
        3
    sayori  
    OP
       Apr 18, 2013
    @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
        4
    xhinking  
       Apr 18, 2013
    表中的测试数据有多少条?
    sayori
        5
    sayori  
    OP
       Apr 18, 2013
    @yhy2008 把ON 改成WHERE 发生错误呢... 用的是MYSQL
    sayori
        6
    sayori  
    OP
       Apr 18, 2013
    @xhinking 有多条。我检查过了..
    sayori
        7
    sayori  
    OP
       Apr 18, 2013
    @123123 悲剧,我再试了下发现确实返回多行。但每行一样ITEM数据都一样,不同的是info字段。这不是我想要的...

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

    越搞越乱了....不管怎样先感谢各位。
    123123
        8
    123123  
       Apr 18, 2013
    @sayori 没错,依照你的写法就是这样的返回值。如果你只想要 INFO 表的字段,那么 SELECT 后不要用 *,用 INFO.*
    yhy2008
        9
    yhy2008  
       Apr 19, 2013
    @sayori 不好意思写错了是用ON
    是不是因为WHERE后的限定条件,如果item.status=1是唯一的话,它只会返回item一样的数据
    Cadina
        10
    Cadina  
       Apr 19, 2013
    最反感字段前面还要加表名了
    xunyu
        11
    xunyu  
       Apr 19, 2013
    @sayori 后台是用php吗?
    Narcissu5
        12
    Narcissu5  
       Apr 19, 2013
    提醒下楼主,数据库求助一般是把表的create 脚本放出来,比你的描述会给力得多。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5050 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 03:56 · PVG 11:56 · LAX 20:56 · JFK 23:56
    ♥ Do have faith in what you're doing.