За последние 24 часа нас посетили 20386 программистов и 1008 роботов. Сейчас ищут 382 программиста ...

Запрос

Тема в разделе "MSSQL", создана пользователем rastamannns, 6 дек 2011.

  1. rastamannns

    rastamannns Активный пользователь

    С нами с:
    6 дек 2011
    Сообщения:
    2
    Симпатии:
    0
    Добрый день

    Составил запрос на сравнение 2 таблиц и вывод данных в одну
    Код (Text):
    1. SELECT top 100 p.sid, p.name as PersonName, g.name as GuildName, p.lv, p.job,p.jlv FROM Character AS p
    2. with (nolock) INNER JOIN Guild as g ON g.sid = p.guild_id
    3. where p.permission ='0' and p.name not like '@%' order by p.exp desc
    таблицу но есть одна незадача для меня если g.sid = 0 то он не выводит те данные в таблицу, как сделать так чтоб если g.sid = 0 то он тоже выводил эти днные.

    Потом эти данные выводятся на сайт

    спасибо всем
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Попробуй INNER JOIN заменить на LEFT JOIN.
    Но вообще, не уверен, есть ли это в MSSQL - никогда не пользовался и даже не читал про него.
     
  3. rastamannns

    rastamannns Активный пользователь

    С нами с:
    6 дек 2011
    Сообщения:
    2
    Симпатии:
    0
    Да он стал выводить но там написано значение NULL а можно ли составить условие которе бы говорило что если
    g.sid = 0 то пишем там например 'Без гильдии' а если g.sid > 0 то берем значение из таблицы!
     
  4. Doomych

    Doomych Активный пользователь

    С нами с:
    11 авг 2011
    Сообщения:
    10
    Симпатии:
    0
    Можно использовать CASE:

    [sql]SELECT
    .....,
    CASE
    WHEN g.sid = 0 THEN 'То-то'
    WHEN g.sid > 0 THEN 'Сё-то'
    ELSE 'Остальное'
    END AS MyField,
    ......
    FROM .....[/sql]

    Я не вникал в ваш запрос, но, может, вам вместо CASE сможет помочь ISNULL(<значение или выражение>, <значение, если выражение - NULL>)
     
  5. uri

    uri Активный пользователь

    С нами с:
    3 сен 2009
    Сообщения:
    43
    Симпатии:
    1
    Не надо никаких case.
    Используй left join (или full outer join - если могут не совпадать значения как в табличке слева, так и справа), в условии where пишешь для правой таблицы для поля p.guild_id условие IS NULL( или для случая с full outer join условием будет - where ((p.guild_id is null) or (g.sid is null)) полностью).
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    мб два запроса сделать? =)
     
  7. Alex870

    Alex870 Новичок

    С нами с:
    8 дек 2013
    Сообщения:
    121
    Симпатии:
    2
    А функция ISNULL() как же, может её лучше использовать, ему же просто нулы нужно заменить на ... что-то там.