всем привет.
таблица set столбцы id, itemNumber, setDate
и таблица set_check столбцы id, itemnumber, checkDate
есть запрос который выводит данные из двух таблиц:
SELECT
`set`.*,
set_check.*
FROM `set`,
set_check
WHERE `set`.itemNumber = set_check.itemNumber
есть необходимость, сделать наоборот - показать строки, которые не соответствуют данному запросу. То есть, показать строки где itemNumber одной таблицы, не существует в другой
подскажите как можно сделать
AllesKlar
5.02.2018 - 17:56
... left join set_check st on (s.itemNumber = st.itemNumber) where st.id isnull
_____________
[продано копирайтерам]
Цитата (AllesKlar @ 5.02.2018 - 13:56) |
... left join set_check st on (s.itemNumber = st.itemNumber) where st.id isnull |
спасибо.
но что то тут не так :huh:
показываются записи, которых нет в таблице set_check но есть в таблице set
но если в таблице set_check есть еще записи, которые не имеют схожий itemNumber, то они не выводятся
то есть получается, что выводятся не все записи с таблицы set_check
AllesKlar
6.02.2018 - 14:43
Цитата (Okulo @ 5.02.2018 - 15:47) |
То есть, показать строки где itemNumber одной таблицы, не существует в другой
|
Цитата (Okulo @ 6.02.2018 - 08:31) |
но если в таблице set_check есть еще записи, которые не имеют схожий itemNumber, то они не выводятся |
Это значит, что itemNumber - это не внешний ключ ни к одной таблице?
Тогда делай 2 запроса, первый, как я полказал, второй поменять право/лево и объединяй их UNION
_____________
[продано копирайтерам]
Цитата (AllesKlar @ 6.02.2018 - 10:43) |
Цитата (Okulo @ 5.02.2018 - 15:47) | То есть, показать строки где itemNumber одной таблицы, не существует в другой
|
Цитата (Okulo @ 6.02.2018 - 08:31) | но если в таблице set_check есть еще записи, которые не имеют схожий itemNumber, то они не выводятся |
Это значит, что itemNumber - это не внешний ключ ни к одной таблице? Тогда делай 2 запроса, первый, как я полказал, второй поменять право/лево и объединяй их UNION
|
спасибо за советы.
я сейчас рассматриваю вариант сделать одну таблицу, где будет только keyNumber, itemNumber, ststus
статус будет меняться у записей например 0 или 1
но тоже вопрос возник - как вывести записи, у которых нет статуса 1, а только 0?
пример:
keyNumber itemNumber status
001 555 0
001 555 1
002 444 0
003 333 0
тут мне нужно тогда вывести temNumber 444 и 333 так как у них нет статуса 1, но не выводить 555
AllesKlar
6.02.2018 - 18:06
Цитата (Okulo @ 6.02.2018 - 14:17) |
но тоже вопрос возник - как вывести записи, у которых нет статуса 1, а только 0? |

where status = 0 ?
_____________
[продано копирайтерам]
Цитата (AllesKlar @ 6.02.2018 - 14:06) |
Цитата (Okulo @ 6.02.2018 - 14:17) | но тоже вопрос возник - как вывести записи, у которых нет статуса 1, а только 0? |
 where status = 0 ? |

как бы да.
но у записи 555 есть статус 1
AllesKlar
6.02.2018 - 19:23
Okulo
То, что ты хочешь сделать, называется битовая маска. В умелых руках вещь очень полезная.
Можно и без нее, составляя дремучие запросы, но с маской будет легче
Каждый бит отвечает за статус. Собираешь маску статусов и простым запросом тянешь все, что ей удовлетворяет, заодно и записи плодиться не будут.
было
001 555 0
001 555 1
002 444 0
003 333 0
стало
001 555 01
002 444 00
003 333 00
Либо озвучь подробно задачу, тебе накидают другую архетектуру таблиц.
_____________
[продано копирайтерам]
AllesKlar
я не совсем понял.
а далее как будет?
001 555 010
002 444 001
003 333 000
и т.д.?
боюсь это не совсем то что нужно, так как будет одна запись и не будет понятно, сколько повторений (строк) вообще было
в общем сделал вот как:
SELECT * FROM uchet WHERE id IN (SELECT MAX(id) FROM uchet GROUP BY itemNumber) AND register < 2
Цитата (AllesKlar @ 6.02.2018 - 15:23) |
Okulo Либо озвучь подробно задачу, тебе накидают другую архетектуру таблиц. |
мой последний запрос с >3000 строками уже очень долго думает
в общем задача у меня такая:
нужно сначала записывать данные по учету в таблицу (у меня так - keyNumber itemNumber status. где status 1 это приход)
а после, снимать учтенные данные(я делаю новую запись со status 0)
в конце, я должен сравнить сколько было статусов 1 и статусов 0, то есть снятий, и соответственно показать itemNumber тех, которые не снялись
думал может писать в две таблицы - одна приход, другая снятие и сравнивать?
приведу еще конкретный пример:
есть таблица, где фиксируется уход и приход сотрудника -
name date status, где статус 1 уход и статус 2 приход.
каждый раз, записывается одна строка, уход или приход с разным статусом.
Как вывести всех людей(записи), которые пришли, но не ушли?
Цитата (Okulo @ 16.04.2018 - 21:20) |
Как вывести всех людей(записи), которые пришли, но не ушли? |
SELECT `t1`.*
FROM `uchet` AS `t1`
LEFT JOIN `uchet` AS `t2` ON `t1`.`name`=`t2`.`name` AND DATE(`t1`.`date`)=DATE(`t2`.`date`) AND `t2`.`status`=1
WHERE `t1`.`status`=2 AND `t2`.`name` IS NULL
Цитата (kaww @ 16.04.2018 - 23:07) |
Цитата (Okulo @ 16.04.2018 - 21:20) | Как вывести всех людей(записи), которые пришли, но не ушли? |
SELECT `t1`.* FROM `uchet` AS `t1` LEFT JOIN `uchet` AS `t2` ON `t1`.`name`=`t2`.`name` AND DATE(`t1`.`date`)=DATE(`t2`.`date`) AND `t2`.`status`=1 WHERE `t1`.`status`=2 AND `t2`.`name` IS NULL |
сори.
в общем после кое какой возни запустил запрос.
8000 строк. висел запрос примерно минуты 3 и выдал ошибку
Цитата (Okulo @ 17.04.2018 - 15:41) |
SELECT `t1`.* - тут мы что выбираем? |
Цитата (Okulo @ 16.04.2018 - 21:20) |
всех людей(записи), которые пришли, но не ушли |
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.