Что SQL-оператор состоит в том, чтобы выбрать объект, который имеет несколько атрибутов в объекте/списке атрибутов?

Используйте CountDownTimer для достижения.

      final AlertDialog.Builder dialog = new AlertDialog.Builder(this)
            .setTitle("Leaving launcher").setMessage(
                    "Are you sure you want to leave the launcher?");
       dialog.setPositiveButton("Confirm",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int whichButton) {
                     exitLauncher();

                }
            });
    final AlertDialog alert = dialog.create();
    alert.show();

    new CountDownTimer(5000, 1000) {

        @Override
        public void onTick(long millisUntilFinished) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onFinish() {
            // TODO Auto-generated method stub

            alert.dismiss();
        }
    }.start();
5
задан philipxy 24 May 2019 в 22:10
поделиться

9 ответов

select  item.name 
from    item 
where   item.attribute in ('4 legs', 'green') 
group by item.name 
having  count(distinct item.attribute) = 2
9
ответ дан 18 December 2019 в 13:18
поделиться

Самый эффективный способ сделать это - использовать самосоединение:

SELECT * FROM attributes a1 
JOIN attributes a2 USING (item_name) -- e.g. frog
WHERE a1.value = 'green' AND a2.value = '4 legs';

Другое решение, которое используют некоторые люди, - это трюк с GROUP BY:

SELECT item_name FROM attributes
WHERE value IN ('4 legs', 'green')
GROUP BY item_name
HAVING COUNT(*) = 2;

Но решение GROUP BY может не быть таким же эффективным, как JOIN, в зависимости от того, какую марку СУБД вы используете. Также один метод может лучше масштабироваться по мере увеличения объема в вашей таблице.

2
ответ дан 18 December 2019 в 13:18
поделиться
select
    item, count(*)
from
    @temp
where
    attribute in ('4 legs','green')
group by
    item
having
    count(*) = 2 -- this "2" needs to be replaced with however many attributes you have
1
ответ дан 18 December 2019 в 13:18
поделиться

Я использовал эти системы так, как вы описываете, в Windows с Visual Studio 2008:

  • Visual Source Safe
  • Subversion
  • Mercurial
  • Git

Если вы цените свою жизнь, никогда не используют Visual Source Safe ...

Subversion

  • Плюсы: Отличные инструменты, как на стороне сервера, так и на стороне клиента. VisualSVN и TortoiseSVN .
  • Минусы: не очень хорошо справляется с объединением.

Git

  • Плюсы: Отличная поддержка слияния, быстрая.
  • Минусы : Инструменты Windows практически отсутствуют, существующие графические интерфейсы настолько ужасны, что я надеюсь, что мне больше никогда не придется их использовать. (мое мнение)

Mercurial

  • Плюсы: Отличная поддержка слияния, неплохие инструменты. TortoiseHG и VisualHG , сценарии ловушек на основе Python могут быть написаны на Python,
1
ответ дан 18 December 2019 в 13:18
поделиться

Трудно, потому что это не нормализованная модель. Сейчас выходные.

Вы фильтруете несколько несвязанных строк, поэтому вам придется извлекать каждый атрибут по очереди, а затем сопоставлять элементы.

SELECT
   item
FROM
    (SELECT
        item
    FROM
        Mytable
    WHERE
        attribute = '4 legs') k1
    JOIN
    (SELECT
        item
    FROM
        Mytable
    WHERE
        attribute = 'green') k2 ON k1.item = k2.item
0
ответ дан 18 December 2019 в 13:18
поделиться

You could also query each attribute separately, and then intersect them...

/*
-- create sample table...
create table #temp1
    (item varchar(max),
    attrib varchar(max))

-- populate sample table (SQL 08)...
insert #temp1
values ('frog', 'green'), ('cat', 'furry'), ('frog', 'nice'), ('cat', '4 legs'), ('frog', '4 legs')
*/


SELECT  item
FROM    #temp1
WHERE   attrib = 'green'
INTERSECT
SELECT  item
FROM    #temp1
WHERE   attrib = '4 legs'
1
ответ дан 18 December 2019 в 13:18
поделиться

создайте две таблицы, одну предметов и один из атрибутов.
Элементы могут иметь имя intAttributeID, где intAttributeID - это ссылка внешнего ключа на таблицу атрибутов. Таким образом, вы можете сделать оператор select на основе того, что вам интересно.

0
ответ дан 18 December 2019 в 13:18
поделиться

Но, возможно, это поможет вам:

SELECT * 
FROM tbl t1
INNER JOIN tbl t2 ON t1.Name = t2.Name
WHERE t1.Attribute = 'green' AND t2.Attribute = '4 legs'
0
ответ дан 18 December 2019 в 13:18
поделиться

Если можно, перепроектирую. Это не то, что вы когда-либо сможете эффективно запросить 12 значений одновременно (для этого потребуется 12 объединений)

Прочтите эту статью в Википедии http://en.wikipedia.org/wiki/Entity-Attribute-Value_model#Downsides

Никогда еще не видел базы данных, в которой использовалась бы эта модель, которая в конечном итоге не столкнулась бы с серьезными проблемами производительности. Такой дизайн выглядит элегантно для людей, не занимающихся базами данных, но на самом деле обычно является признаком плохо спроектированной базы данных.

0
ответ дан 18 December 2019 в 13:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: