A表                            B表
Id   Name         。      Id     开头字母   AId
1    梦幻西游     。      1      M          1
2    魔兽世界     。      2      M          2
3    魔兽世界     。      3      M          3
4    梦幻西游     。      4      M          4
5    问道         。      5      W          5
有什么办法能根据开头字母查询Name的吗?比如根据M的话会查出4条记录。。就是重复的就不要。。就是根据M查询。。只查出梦幻西游,跟魔兽世界。2条记录。有人做过吗?      A表的。是代表其他字段来的.

解决方案 »

  1.   

    SELECT * 
    FROM a
    JOIN b
    ON  a.id = b.aid
    WHERE id = (
              SELECT MAX(id) 
              FROM a t
              WHERE name = a.name
          )
    AND b.开头字母='M'
      

  2.   

    select distinct name from A where id in(select AID from B where 开头字母=M)
      

  3.   

    --> 生成测试数据表: [a]
    IF OBJECT_ID('[a]') IS NOT NULL
    DROP TABLE [a]
    GO
    CREATE TABLE [a] ([Id] [int],[Name] [nvarchar](10),[OtherCol] [nvarchar](10))
    INSERT INTO [a]
    SELECT '1','梦幻西游','....' UNION ALL
    SELECT '2','魔兽世界','....' UNION ALL
    SELECT '3','魔兽世界','....' UNION ALL
    SELECT '4','梦幻西游','....' UNION ALL
    SELECT '5','问道','....' UNION ALL
    SELECT '5','问道','....'--> 生成测试数据表: [b]
    IF OBJECT_ID('[b]') IS NOT NULL
    DROP TABLE [b]
    GO
    CREATE TABLE [b] ([Id] [int],[开头字母] [nvarchar](10),[AId] [int])
    INSERT INTO [b]
    SELECT '1','M','1' UNION ALL
    SELECT '2','M','2' UNION ALL
    SELECT '3','M','3' UNION ALL
    SELECT '4','M','4' UNION ALL
    SELECT '5','W','5' UNION ALL
    SELECT '5','W','5'--SELECT * FROM [a]
    --SELECT * FROM [b]-->SQL查询如下:SELECT a.* 
    FROM a
    JOIN b
    ON  a.id = b.aid
    WHERE a.id = (
              SELECT MAX(id) 
              FROM a t
              WHERE name = a.name
          )
    AND b.开头字母='M'
    /*
    Id          Name       OtherCol
    ----------- ---------- ----------
    3           魔兽世界       ....
    4           梦幻西游       ....(2 行受影响)
    */
      

  4.   

    htl258。。牛啊。。能解释一下 FROM a t   的这个t是什么意思吗?