Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2012, 14:48   #1
M-K
 
Регистрация: 13.02.2012
Сообщений: 9
По умолчанию Запрос к двум таблицам, одна из них - соотнесение

Код:
SELECT count(*)
FROM a2l, atoms
WHERE a2l.a2l_atoms_id=atoms.atoms_id AND
    a2l.a2l_lexems_id = 1 AND
    atoms.atoms_clot = 1
Запрос возвращает
count(*)
1

Но реально должно быть не так мало, а больше. Вот что из себя представляют эти таблицы:
Код:
CREATE TABLE a2l (
  a2l_id int(11) NOT NULL auto_increment,
  a2l_atoms_id int(11) NOT NULL,
  a2l_lexems_id int(11) NOT NULL,
  PRIMARY KEY  (a2l_id)
) ENGINE=InnoDB  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=21 ;

INSERT INTO a2l (a2l_id, a2l_atoms_id, a2l_lexems_id) VALUES
(1, 1, 5),
(2, 1, 2),
(3, 1, 3),
(4, 2, 1),
(5, 2, 4),
(6, 3, 6),
(7, 3, 2),
(8, 4, 5),
(9, 4, 4),
(10, 4, 6),
(11, 5, 2),
(12, 5, 1),
(13, 5, 5),
(14, 6, 2),
(15, 6, 1),
(16, 7, 1),
(17, 7, 5),
(18, 8, 2),
(19, 8, 5),
(20, 8, 4);

CREATE TABLE atoms (
  atoms_id int(11) NOT NULL auto_increment,
  atoms_clot int(11) NOT NULL,
  atoms_temp int(11) default NULL,
  atoms_temp2 int(11) NOT NULL,
  atoms_number double NOT NULL,
  atoms_dimensions_id int(11) NOT NULL,
  PRIMARY KEY  (atoms_id)
) ENGINE=InnoDB  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=9 ;

INSERT INTO atoms (atoms_id, atoms_clot, atoms_temp, atoms_temp2, atoms_number, atoms_dimensions_id) VALUES
(1, 1, 3, 0, 100, 1),
(2, 1, 2, 0, 100, 1),
(3, 0, 2, 0, 100, 1),
(4, 0, 3, 0, 100, 1),
(5, 0, 3, 0, 100, 1),
(6, 0, 2, 0, 100, 1),
(7, 0, 2, 0, 100, 1),
(8, 0, 3, 0, 100, 1);

CREATE TABLE lexems (
  lexems_id int(20) NOT NULL auto_increment,
  lexems_text varchar(100) NOT NULL,
  lexems_clot int(11) NOT NULL,
  lexems_id_db int(11) default NULL,
  lexems_in_clot int(11) default NULL,
  PRIMARY KEY  (lexems_id)
) ENGINE=InnoDB  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;

INSERT INTO lexems (lexems_id, lexems_text, lexems_clot, lexems_id_db, lexems_in_clot) VALUES
(1, 'Самара', 1, 4, 0),
(2, 'СГАНУ', 1, 5, 0),
(3, 'ФИТ', 1, 1, 0),
(4, 'Ф-105', 0, 3, 0),
(5, '520 аудитория', 1, 5, 0),
(6, '2011', 0, 2, 0);
M-K вне форума Ответить с цитированием
Старый 13.02.2012, 15:05   #2
M-K
 
Регистрация: 13.02.2012
Сообщений: 9
По умолчанию

Сделаю пояснение.

Как сделать нужный мне запрос вместо приведенного? Дело вот в чем


SELECT COUNT(a2l_lexems_id) AS count FROM a2l WHERE a2l_lexems_id =1

Такой запрос, который выдает - сколько раз лексема (таблица лексем - lexems) под номером 1 встречается в атомах (таблица атомов - это таблица atoms).

А таблица a2l - это таблица соотнесения. Ведь лексема может только один раз встретиться в атоме, или ни разу.

Так вот, я пытаюсь создать запрос, который считает не просто сколько раз встречается лексема в БД, а считает только те случаи, где atoms_clot=1 в таблице atoms.
M-K вне форума Ответить с цитированием
Старый 13.02.2012, 15:10   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Согласно WHERE все правильно - 1 запись. Уберите atoms.atoms_clot = 1 - вернет 4
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.02.2012, 15:57   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

полностью согласен с Аватар!


Цитата:
Но реально должно быть не так мало, а больше. Вот что из себя представляют эти таблицы:
да нет, судя по запросу:
Цитата:
Код:
SELECT count(*)
FROM a2l, atoms
WHERE a2l.a2l_atoms_id=atoms.atoms_id AND
    a2l.a2l_lexems_id = 1 AND
    atoms.atoms_clot = 1
и заполненным данным удовлетворяет только ОДНА запись из a21:
Цитата:
Код:
(4, 2, 1),
у остальных либо atoms_clot<>1 (он равен 1 только для atoms_id in (1,2) )
либо a2l_lexems_id <> 1 ...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос по всем таблицам balanuha Microsoft Office Access 0 31.10.2011 22:00
перемещение по двум таблицам Alexi Общие вопросы Delphi 5 04.06.2009 13:30
составить запрос к таблицам T1 и T2 MonteCarlos SQL, базы данных 13 03.02.2008 14:05
Запрос по всем таблицам Abay SQL, базы данных 3 27.09.2007 09:07