Проблема с составлением SQL-запроса

12
J
На сайте с 03.07.2006
Offline
122
733

Здраствуйте всем, уважаемые господа:)

сразу к делу. Ситуация такая...(при описании задачу упростил, чтобы было понятнее, но смысл тот же). Итак..

Есть две таблицы.

таблица 1

id | id3 | info

таблица 2

id2 | id3 | count

далее. одной записи в 1 таблице может принадлежать несколько записей из второй.

Так вот, мне надо соединить эти две таблицы, НО! не все так просто....

Так вот надо чтобы если во второй таблице нет записи со значением например count=3, соответствующую записи в таблице 1, То запись из таблицы 1 выбиралась всеравно, но при этом значение count из второй таблицы было равно NULL.


Простой пример, чтобы лучше понять.

таблица 1.

id | id3 | info

-------------

45| 1 | myInfo

таблица 2.

id2 | id3 | count

---------------

1 | 1 | 24

2 | 1 | 46

3 | 1 | 2

Итак если сделать запрос запрос:

SELECT table1.*, table2.count......WHERE table1.id2=table2.id2 AND table1.id=45 AND table2.count=3

ничего не выведится.

НО мне надо сделать так, чтобы выводилась инфа первой таблицы. А поля второй таблицы были NULL если там нет соответсвий условиям (Т.е. случай, который описал выше).

Надеюсь задача ясна:)

Тимонин Александр, Тольятти. Вконтакте https://vk.com/my.face (https://vk.com/my.face) Управление ссылками на своих сайтах + Контекстные ссылки (/ru/forum/489616) Скрипты, недорого отзывы от форумчан (/ru/forum/268922)
frantic
На сайте с 09.02.2009
Offline
27
#1
Jeff:

SELECT table1.*, table2.count......WHERE table1.id2=table2.id2 AND table1.id=45 AND table2.count=3

Не очень понял как вы соединяете. Но то что вы написали это inner join, а вам нужен left join

_savit
На сайте с 19.03.2006
Offline
135
#2

SELECT

t1.id,

t1.id3,

t1.info,

t2.count

FROM table1 t1

LEFT JOIN table2 t2 ON t1.id3=t2.id3

WHERE t1.id=45 AND t2.count=3

https://vk-botovod.ru - комбайн ВКонтакте, мультимессенджер, эмулятор жизни аккаунтов
J
На сайте с 03.07.2006
Offline
122
#3

НЕ робит.

Прикол в том, что соответствующие записи с условием t1.id3=t2.id3 есть. но с условием t2.count=3 нет.

Если бы записей во второй таблице с условием t1.id3=t2.id3 не было, то вывелась бы запись из первой таблицы, а из второй занчения NULL.

Незнаю почему, но работает именно так

frantic
На сайте с 09.02.2009
Offline
27
#4
Jeff:

Если бы записей во второй таблице с условием t1.id3=t2.id3 не было, то вывелась бы запись из первой таблицы, а из второй занчения NULL.
Незнаю почему, но работает именно так

Это вообще как. Можно запрос ваш в студию, и что выдает

J
На сайте с 03.07.2006
Offline
122
#5

Запрос:

SELECT t1.id,t1.id3,t1.info,t2.count FROM t1 LEFT JOIN t2 ON t1.id3=t2.id3 WHERE t1.id=1 AND t2.count=1 OR t2.count IS NULL

Все так и есть. Вот только что создал такую таблицу, сделал запрос при одном и другом случае. И все так есть как я и писал.

frantic
На сайте с 09.02.2009
Offline
27
#6
Jeff:
OR t2.count IS NULL

Вот это не понял к чему

J
На сайте с 03.07.2006
Offline
122
#7

к тому, что когда во второй таблице нет соответсвий работает именно так. если убрать, то выборки не будет.

мдамс...чтото после стольких моих мучений, мне почемуто начинает казаться, что то что я хочу неосуществимо:(

frantic
На сайте с 09.02.2009
Offline
27
#8
Jeff:

мдамс...чтото после стольких моих мучений, мне почемуто начинает казаться, что то что я хочу неосуществимо:(

Да осуществимо точно, просто надо понять все до конца. Напишите пример с таблицами побольше

J
На сайте с 03.07.2006
Offline
122
#9

Дамп примера.

CREATE TABLE `t1` (

`id` int(11) NOT NULL auto_increment,
`id3` int(11) NOT NULL,
`info` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;


INSERT INTO `t1` VALUES (1, 1, 'onfo');

CREATE TABLE `t2` (
`id2` int(11) NOT NULL auto_increment,
`id3` int(11) NOT NULL,
`count` int(11) NOT NULL default '0',
PRIMARY KEY (`id2`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;

INSERT INTO `t2` VALUES (1, 30, 5);
INSERT INTO `t2` VALUES (6, 1, 14);

Запрос:

SELECT t1.id,t1.id3,t1.info,t2.count FROM t1 LEFT JOIN t2 ON t1.id3=t2.id3 WHERE t1.id=1 AND t2.count=1 OR t2.count IS NULL

Делаем запрос - ничего.

Удаляем из таблицы t2 запись с id2=6. Делаем запрос снова - все гуд.

frantic
На сайте с 09.02.2009
Offline
27
#10

Короче я все равно не вьезжаю что надо в итоге получить))

Попробуй это:


SELECT *
FROM t1
LEFT JOIN t2 ON t1.id3=t2.id3 AND t2.count = 3

Вот count = 3 нету, вернуло NULL. Так?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий