Можно ли определить “литеральные” таблицы в SQL?

Я предполагаю, что вы хотите, чтобы это произошло, когда пользователь нажимает ввод только тогда, когда TextField имеет фокус. Вы захотите использовать KeyEvent из javafx.scene.input и сделать что-то вроде этого ...

textField.setOnKeyPressed(new EventHandler<KeyEvent>()
    {
        @Override
        public void handle(KeyEvent ke)
        {
            if (ke.getCode().equals(KeyCode.ENTER))
            {
                doSomething();
            }
        }
    });

Надеюсь, это полезно!

55
задан thomasrutter 11 June 2009 в 19:41
поделиться

5 ответов

Я полагаю, вы могли бы выполнить подзапрос с несколькими SELECT в сочетании с UNION s.

SELECT a, b, c, d
FROM (
    SELECT 1 AS a, 2 AS b, 3 AS c, 4 AS d
    UNION ALL 
    SELECT 5 , 6, 7, 8
) AS temp;
53
ответ дан 7 November 2019 в 07:14
поделиться

В стандартном SQL (SQL 2003 - см. http://savage.net.au/SQL/ ) вы можете использовать:

INSERT INTO SomeTable(Id, Count) VALUES (1, 7), (2, 6), (3, 13), ...

Если немного погоняться, вы также можете использовать:

SELECT * FROM TABLE(VALUES (1,7), (2, 6), (3, 13), ...) AS SomeTable(Id, Count)

Независимо от того, работает ли эта работа в MySQL отдельно, но вы всегда можете попросить добавить ее или добавить самостоятельно (в этом прелесть Open Source).

19
ответ дан 7 November 2019 в 07:14
поделиться

СОЗДАТЬ ВРЕМЕННУЮ ТАБЛИЦУ (ID int, Name char (100)) SELECT ....

Подробнее на: http://dev.mysql.com/doc/ refman / 5.0 / en / create-table.html

(внизу)

Это имеет то преимущество, что при возникновении проблем с заполнением таблицы (несоответствие типов данных) таблица автоматически удаляется.

в раннем ответе использовалось предложение FROM SELECT. Если возможно, используйте это, потому что это избавляет от головной боли при уборке стола.

Недостатком (который может не иметь значения) FROM SELECT является размер созданного набора данных. Временная таблица позволяет выполнять индексацию, что может быть критичным. Для последующего запроса. Это кажется нелогичным, но даже с набором данных среднего размера (~ 1000 строк) может быть быстрее создать индекс, с которым будет работать запрос.

0
ответ дан 7 November 2019 в 07:14
поделиться

Я нашел эту ссылку Временные таблицы с MySQL

CREATE TEMPORARY TABLE TempTable ( ID int, Name char(100) ) TYPE=HEAP; 

INSERT INTO TempTable VALUES( 1, "Foo bar" ); 

SELECT * FROM TempTable; 

DROP TABLE TempTable;
6
ответ дан 7 November 2019 в 07:14
поделиться

Одним словом, да. Еще лучше IMO, если ваш продукт SQL поддерживает общие табличные выражения (CTE), то есть проще для глаз, чем использование подзапроса, плюс один и тот же CTE можно использовать несколько раз, например, это для `` создания '' таблицы последовательности уникальных целых чисел от 0 до 999 в SQL Сервер 2005 и выше:

WITH Digits (nbr) AS 
(
 SELECT 0 AS nbr UNION ALL SELECT 1 UNION ALL SELECT 2 
 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 
 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 
 UNION ALL SELECT 9 
), 
Sequence (seq) AS
(
 SELECT Units.nbr + Tens.nbr + Hundreds.nbr 
   FROM Digits AS Units
        CROSS JOIN Digits AS Tens
        CROSS JOIN Digits AS Hundreds
)
SELECT S1.seq 
  FROM Sequence AS S1;

, за исключением того, что вы действительно можете сделать что-нибудь полезное с таблицей последовательности, например, проанализировать символы из столбца VARCHAR в базовой таблице.

ОДНАКО, если вы используете эту таблицу, которая состоит только из литералов значений, несколько раз или в нескольких запросах, тогда почему бы не сделать это в первую очередь базовой таблицей? В каждой базе данных, которую я использую, есть таблица последовательности целых чисел (обычно 100 000 строк), потому что она очень полезна в целом.

0
ответ дан 7 November 2019 в 07:14
поделиться
Другие вопросы по тегам:

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