2013-05-28 2 views
1

Как подсчитать первичный ключ одной таблицы, который используется в другой таблице в столбце 5-6?Как подсчитать первичный ключ одной таблицы в другой таблице?

Если table1 имеет первичный ключ srno, который используется в table2d1 в колонке, d2, d3, d4.

Я хочу подсчитывать, сколько раз srno=1,2,3,4 ... и т.д. используется в table2.

Кто-нибудь знает, как это сделать ???

+0

Что вы имеете в виду под "столом" здесь? Это вопрос SQL? – Bergi

+0

Ваш вопрос полностью основан на SQL, поэтому, пожалуйста, предоставьте базу данных, которую вы используете (mysql или ...). Также должен ли он считаться для всех записей в таблице 1 или только для определенного индекса? –

+0

Да, его вопрос SQL. – user2338384

ответ

1

Следующий запрос возвращает количество раз, каждое значение, используемое в столбцах d1, d2, d3 и d4 в table2 (Обновлено):

SELECT table1.srno, SUM(cnt) FROM 
    table1, 
    (SELECT d1 AS srno, COUNT(d1) AS cnt FROM table2 GROUP BY d1 
    UNION ALL 
    SELECT d2 AS srno, COUNT(d2) AS cnt FROM table2 GROUP BY d2 
    UNION ALL 
    SELECT d3 AS srno, COUNT(d3) AS cnt FROM table2 GROUP BY d3 
    UNION ALL 
    SELECT d4 AS srno, COUNT(d4) AS cnt FROM table2 GROUP BY d4) AS cnt_tbl 
WHERE table1.srno = cnt_tbl.srno 
GROUP BY table1.srno 

Try скрипку here.

Если вы повторного подсчета только один конкретный первичный ключ (например, 1), а затем попробуйте

SELECT SUM(cnt) FROM 
    (SELECT COUNT(*) AS cnt FROM table2 WHERE d1 = 1 
    UNION ALL 
    SELECT COUNT(*) AS cnt FROM table2 WHERE d2 = 1 
    UNION ALL 
    SELECT COUNT(*) AS cnt FROM table2 WHERE d3 = 1 
    UNION ALL 
    SELECT COUNT(*) AS cnt FROM table2 WHERE d4 = 1) AS cnt_tbl 

скрипку here.

Или более элегантное решение без UNION:

SELECT SUM(cnt) FROM 
    (SELECT ((d1=1) + (d2=1) + (d3=1) + (d4=1)) AS cnt 
    FROM table2 
    WHERE d1 = 1 OR d2= 1 OR d3 = 1 OR d4 = 1) AS cnt_tbl 

(Fiddle)

+2

Я думаю, вам нужно «UNION ALL», иначе дубликаты будут подавлены. –

+0

О, да, вы правы, спасибо – Mifeet

+0

srno таблицы1 используется в нескольких столбцах. выше код предназначен для конкретной записи, bt записи могут b несколько. – user2338384

Смежные вопросы