|
|
|
| Имеются две таблицы:
contract - которая находиться в базе bill1
и таблица predup которая находить в базе bill2.
Мне нужно сделать так: вывести из таблицы contract все строки кроме строк, где содержание поля id совпадает с полем ab_id в таблице predup.
P.S. - с таблице contract 3,139 строк
Делаю запрос:
SELECT `contract`.`id` AS `id` FROM `contract`, `bill`.`predup` WHERE `contract`.`id` != `bill2`.`predup`.`ab_id`
после выполнения запроса, мне выводит 9,414 строк.
Как я понимаю цикл проверки проходит 3 раза, потому что у меня в таблице predup 3 строки, и по окончанию каждого цикла, мне выводит все строки которые не содержат значения поля ab_id из таблицы predup
-----------------
contract:
CREATE TABLE IF NOT EXISTS `contract` (
`id` int(10) unsigned NOT NULL auto_increment,
`comment` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=0 ;
-----------------
predup:
CREATE TABLE IF NOT EXISTS `predup` (
`id_pred` int(99) NOT NULL auto_increment,
`ab_id` int(99) NOT NULL default '0',
`data` int(20) NOT NULL default '0',
`data2` int(20) NOT NULL default '0',
`data3` int(20) NOT NULL default '0',
PRIMARY KEY (`id_pred`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=0 ; | |
|
|
|
|
|
|
|
для: Ильдар
(25.04.2008 в 01:01)
| | Используйте JOIN для работы с множествами
Отличную. визуалицию различных видов объединения таблиц можно найти здесь:
http://www.codinghorror.com/blog/archives/000976.html | |
|
|
|
|
|
|
|
для: Axxil
(25.04.2008 в 10:56)
| | Вот уже несколько часов копаюсь по мануалу на сайте майскула, я примерно начал приходить к тому что нужно использовать JOIN.
Как я понимаю JOIN может работать с массивом?
Ведь у меня при одном цикле запроса одна переменная сравнивается с массивом переменных | |
|
|
|
|
|
|
|
для: Ильдар
(25.04.2008 в 11:04)
| | Массив - это частный случай понятия множества.
JOIN объединяет таблицы БД.
В вашем случае, если я правильно понял условия, подойдёт такое исключающее объединение:
SELECT contract.id AS id FROM contract
LEFT JOIN bill2.predup ON contract.id = bill2.predup.ab_id
WHERE bill2.predup.ab_id is NULL
|
| |
|
|
|
|
|
|
|
для: Axxil
(25.04.2008 в 11:32)
| | Аааа, получилось!
Спасибо тебе огромное Axxil | |
|
|
|