Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос к двум таблицам, одна из них - соотнесение 
:(
    Опции темы
Win MK 32
Дата 13.2.2012, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 492
Регистрация: 15.7.2002

Репутация: нет
Всего: нет



Помогите пожалуйста
Код

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); 

PM   Вверх
Win MK 32
Дата 13.2.2012, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 492
Регистрация: 15.7.2002

Репутация: нет
Всего: нет



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

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


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

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

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

Так вот, я пытаюсь создать запрос, который считает не просто сколько раз встречается лексема в БД, а считает только те случаи, где atoms_clot=1 в таблице atoms.
PM   Вверх
Zloxa
Дата 13.2.2012, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Win MK 32 @  13.2.2012,  13:38 Найти цитируемый пост)
Но реально должно быть не так мало, а больше.

кртиерий
Цитата(Win MK 32 @  13.2.2012,  13:38 Найти цитируемый пост)
a2l.a2l_lexems_id = 1

отбирает
Код

(4, 2, 1),
(12, 5, 1),
(15, 6, 1),
(16, 7, 1),

Цитата(Win MK 32 @  13.2.2012,  13:38 Найти цитируемый пост)
a2l.a2l_atoms_id=atoms.atoms_id

соединяет к ранее отобранному
Код

(4, 2, 1),(2, 1, 2, 0, 100, 1),
(12, 5, 1),(5, 0, 3, 0, 100, 1),
(15, 6, 1),(6, 0, 2, 0, 100, 1),
(16, 7, 1),(7, 0, 2, 0, 100, 1),

критерий
Цитата(Win MK 32 @  13.2.2012,  13:38 Найти цитируемый пост)
atoms.atoms_clot = 1

оставляет только
Код

(4, 2, 1),(2, 1, 2, 0, 100, 1),


Все правильно, так, как и должно быть.  smile

Добавлено через 3 минуты и 22 секунды
Цитата(Win MK 32 @  13.2.2012,  14:04 Найти цитируемый пост)
Сделаю пояснение.

В вашем пояснении я ничего не полял  smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 13.2.2012, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Win MK 32 @  13.2.2012,  14:38 Найти цитируемый пост)
реально должно быть не так мало, а больше.

C какого перепуга больше?

Код

mysql> 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)
    -> );
Query OK, 0 rows affected (0.41 sec)

mysql> 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);
Query OK, 20 rows affected (0.03 sec)
Records: 20  Duplicates: 0  Warnings: 0

mysql>
mysql> 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)
    -> );
Query OK, 0 rows affected (0.09 sec)

mysql> 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);
Query OK, 8 rows affected (0.03 sec)
Records: 8  Duplicates: 0  Warnings: 0

mysql> select * from a2l;
+--------+--------------+---------------+
| a2l_id | a2l_atoms_id | a2l_lexems_id |
+--------+--------------+---------------+
|      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 |
+--------+--------------+---------------+
20 rows in set (0.02 sec)

mysql> select * from atoms;
+----------+------------+------------+-------------+--------------+---------------------+
| atoms_id | atoms_clot | atoms_temp | atoms_temp2 | atoms_number | atoms_dimensions_id |
+----------+------------+------------+-------------+--------------+---------------------+
|        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 |
+----------+------------+------------+-------------+--------------+---------------------+
8 rows in set (0.00 sec)

mysql> select * from a2l where a2l.a2l_lexems_id = 1;
+--------+--------------+---------------+
| a2l_id | a2l_atoms_id | a2l_lexems_id |
+--------+--------------+---------------+
|      4 |            2 |             1 |
|     12 |            5 |             1 |
|     15 |            6 |             1 |
|     16 |            7 |             1 |
+--------+--------------+---------------+
4 rows in set (0.01 sec)

mysql> select * from atoms where atoms.atoms_clot = 1;
+----------+------------+------------+-------------+--------------+---------------------+
| atoms_id | atoms_clot | atoms_temp | atoms_temp2 | atoms_number | atoms_dimensions_id |
+----------+------------+------------+-------------+--------------+---------------------+
|        1 |          1 |          3 |           0 |          100 |                   1 |
|        2 |          1 |          2 |           0 |          100 |                   1 |
+----------+------------+------------+-------------+--------------+---------------------+
2 rows in set (0.00 sec)

mysql> SELECT *
    -> FROM a2l, atoms
    -> WHERE a2l.a2l_atoms_id=atoms.atoms_id AND
    ->     a2l.a2l_lexems_id = 1 AND
    ->     atoms.atoms_clot = 1;
+--------+--------------+---------------+----------+------------+------------+-------------+--------------+---------------------+
| a2l_id | a2l_atoms_id | a2l_lexems_id | atoms_id | atoms_clot | atoms_temp | atoms_temp2 | atoms_number | atoms_dimensions_id |
+--------+--------------+---------------+----------+------------+------------+-------------+--------------+---------------------+
|      4 |            2 |             1 |        2 |          1 |          2 |           0 |          100 |                   1 |
+--------+--------------+---------------+----------+------------+------------+-------------+--------------+---------------------+
1 row in set (0.00 sec)

mysql> 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 |
+----------+
1 row in set (0.00 sec)


Код

mysql> update  atoms set atoms_clot=1 where atoms_id > 5;
Query OK, 3 rows affected (0.05 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> select * from atoms;
+----------+------------+------------+-------------+--------------+---------------------+
| atoms_id | atoms_clot | atoms_temp | atoms_temp2 | atoms_number | atoms_dimensions_id |
+----------+------------+------------+-------------+--------------+---------------------+
|        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 |          1 |          2 |           0 |          100 |                   1 |
|        7 |          1 |          2 |           0 |          100 |                   1 |
|        8 |          1 |          3 |           0 |          100 |                   1 |
+----------+------------+------------+-------------+--------------+---------------------+
8 rows in set (0.02 sec)

mysql> select * from atoms where atoms.atoms_clot = 1;
+----------+------------+------------+-------------+--------------+---------------------+
| atoms_id | atoms_clot | atoms_temp | atoms_temp2 | atoms_number | atoms_dimensions_id |
+----------+------------+------------+-------------+--------------+---------------------+
|        1 |          1 |          3 |           0 |          100 |                   1 |
|        2 |          1 |          2 |           0 |          100 |                   1 |
|        6 |          1 |          2 |           0 |          100 |                   1 |
|        7 |          1 |          2 |           0 |          100 |                   1 |
|        8 |          1 |          3 |           0 |          100 |                   1 |
+----------+------------+------------+-------------+--------------+---------------------+
5 rows in set (0.00 sec)

mysql> SELECT *
    -> FROM a2l, atoms
    -> WHERE a2l.a2l_atoms_id=atoms.atoms_id AND
    ->     a2l.a2l_lexems_id = 1 AND
    ->     atoms.atoms_clot = 1;
+--------+--------------+---------------+----------+------------+------------+-------------+--------------+---------------------+
| a2l_id | a2l_atoms_id | a2l_lexems_id | atoms_id | atoms_clot | atoms_temp | atoms_temp2 | atoms_number | atoms_dimensions_id |
+--------+--------------+---------------+----------+------------+------------+-------------+--------------+---------------------+
|      4 |            2 |             1 |        2 |          1 |          2 |           0 |          100 |                   1 |
|     15 |            6 |             1 |        6 |          1 |          2 |           0 |          100 |                   1 |
|     16 |            7 |             1 |        7 |          1 |          2 |           0 |          100 |                   1 |
+--------+--------------+---------------+----------+------------+------------+-------------+--------------+---------------------+
3 rows in set (0.00 sec)

mysql> 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(*) |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0987 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.